天天看點

Hashtable

java.util

類 Hashtable<K,V>

java.lang.Object
  java.util.Dictionary<K,V>
               java.util.Hashtable<K,V>           
所有已實作的接口:
Serializable, Cloneable, Map<K,V>
直接已知子類:
Properties, UIDefaults
public class          Hashtable<K,V>           

extends Dictionary<K,V>

implements Map<K,V>, Cloneable, Serializable

此類實作一個哈希表,該哈希表将鍵映射到相應的值。任何非

null

對象都可以用作鍵或值。

為了成功地在哈希表中存儲和擷取對象,用作鍵的對象必須實作

hashCode

方法和

equals

方法。

Hashtable

的執行個體有兩個參數影響其性能:初始容量 和加載因子。容量

是哈希表中桶 的數量,初始容量 就是哈希表建立時的容量。注意,哈希表的狀态為

open:在發生“哈希沖突”的情況下,單個桶會存儲多個條目,這些條目必須按順序搜尋。加載因子

是對哈希表在其容量自動增加之前可以達到多滿的一個尺度。初始容量和加載因子這兩個參數隻是對該實作的提示。關于何時以及是否調用 rehash

方法的具體細節則依賴于該實作。

通常,預設加載因子(.75)在時間和空間成本上尋求一種折衷。加載因子過高雖然減少了空間開銷,但同時也增加了查找某個條目的時間(在大多數

Hashtable 操作中,包括 get 和 put 操作,都反映了這一點)。

初始容量主要控制空間消耗與執行

rehash

操作所需要的時間損耗之間的平衡。如果初始容量大于

Hashtable 所包含的最大條目數除以加載因子,則永遠 不會發生

rehash

操作。但是,将初始容量設定太高可能會浪費空間。

如果很多條目要存儲在一個

Hashtable

中,那麼與根據需要執行自動 rehashing

操作來增大表的容量的做法相比,使用足夠大的初始容量建立哈希表或許可以更有效地插入條目。

下面這個示例建立了一個數字的哈希表。它将數字的名稱用作鍵:

Hashtable<String, Integer> numbers
     = new Hashtable<String, Integer>();
   numbers.put("one", 1);
   numbers.put("two", 2);
   numbers.put("three", 3);           

要擷取一個數字,可以使用以下代碼:

Integer n = numbers.get("two");
     if (n != null) {
         System.out.println("two = " + n);
     }
                   }      

由所有類的“collection 視圖方法”傳回的 collection 的 iterator

方法傳回的疊代器都是快速失敗 的:在建立 Iterator 之後,如果從結構上對 Hashtable 進行修改,除非通過 Iterator

自身的 remove 方法,否則在任何時間以任何方式對其進行修改,Iterator 都将抛出

ConcurrentModificationException

。是以,面對并發的修改,Iterator

很快就會完全失敗,而不冒在将來某個不确定的時間發生任意不确定行為的風險。由 Hashtable 的鍵和元素方法傳回的 Enumeration

不 是快速失敗的。

注意,疊代器的快速失敗行為無法得到保證,因為一般來說,不可能對是否出現不同步并發修改做出任何硬性保證。快速失敗疊代器會盡最大努力抛出

ConcurrentModificationException。是以,為提高這類疊代器的正确性而編寫一個依賴于此異常的程式是錯誤做法:疊代器的快速失敗行為應該僅用于檢測程式錯誤。

從Java 2 平台 v1.2起,此類就被改進以實作

Map

接口,使它成為 Java Collections

Framework 中的一個成員。不像新的 collection 實作,

Hashtable

是同步的

從以下版本開始:
JDK1.0
另請參見:

Object.equals(java.lang.Object)

,

Object.hashCode()

rehash()

Collection

Map

HashMap

TreeMap

, 序列化表格
構造方法摘要

Hashtable

()

用預設的初始容量 (11) 和加載因子 (0.75) 構造一個新的空哈希表。

Hashtable

(int initialCapacity)

用指定初始容量和預設的加載因子 (0.75) 構造一個新的空哈希表。

Hashtable

(int initialCapacity, float loadFactor)

用指定初始容量和指定加載因子構造一個新的空哈希表。

Hashtable

(Map<? extends K,? extends V> t)

構造一個與給定的

Map 具有相同映射關系的新哈希表。

方法摘要

void

clear

()

将此哈希表清空,使其不包含任何鍵。

Object

clone

()

建立此哈希表的淺表副本。

boolean

contains

(Object value)

測試此映射表中是否存在與指定值關聯的鍵。

boolean

containsKey

(Object key)

測試指定對象是否為此哈希表中的鍵。

boolean

containsValue

(Object value)

如果此

Hashtable 将一個或多個鍵映射到此值,則傳回 true。

Enumeration<V>

elements

()

傳回此哈希表中的值的枚舉。

Set<Map.Entry<K,V>>

entrySet

()

傳回此映射中包含的鍵的

Set

視圖。

boolean

equals

(Object o)

按照 Map 接口的定義,比較指定 Object 與此 Map 是否相等。

V

get

(Object key)

傳回指定鍵所映射到的值,如果此映射不包含此鍵的映射,則傳回

null

. 更确切地講,如果此映射包含滿足

(key.equals(k))

的從鍵

k

到值

v

的映射,則此方法傳回

v

;否則,傳回

null

int

hashCode

()

按照 Map 接口的定義,傳回此 Map 的哈希碼值。

boolean

isEmpty

()

測試此哈希表是否沒有鍵映射到值。

Enumeration<K>

keys

()

傳回此哈希表中的鍵的枚舉。

Set<K>

keySet

()

Set

V

put

(K key, V value)

将指定

key

映射到此哈希表中的指定

value

void

putAll

(Map<? extends K,? extends V> t)

将指定映射的所有映射關系複制到此哈希表中,這些映射關系将替換此哈希表擁有的、針對目前指定映射中所有鍵的所有映射關系。

protected void

rehash

()

增加此哈希表的容量并在内部對其進行重組,以便更有效地容納和通路其元素。

V

remove

(Object key)

從哈希表中移除該鍵及其相應的值。

int

size

()

傳回此哈希表中的鍵的數量。

String

toString

()

傳回此 Hashtable 對象的字元串表示形式,其形式為 ASCII 字元 ", "

(逗号加空格)分隔開的、括在括号中的一組條目。

Collection<V>

values

()

Collection

從類 java.lang.Object 繼承的方法

finalize, getClass, notify, notifyAll, wait, wait, wait

構造方法詳細資訊

Hashtable

public          Hashtable                (int initialCapacity,
                 float loadFactor)      
參數:

initialCapacity

- 哈希表的初始容量。

loadFactor

- 哈希表的加載因子。
抛出:

IllegalArgumentException

- 如果初始容量小于零,或者加載因子為非正數。

public          Hashtable                (int initialCapacity)      

initialCapacity

IllegalArgumentException

- 如果初始容量小于零。

public          Hashtable                ()      

public          Hashtable                (Map<? extends K,? extends V> t)      

構造一個與給定的 Map 具有相同映射關系的新哈希表。該哈希表是用足以容納給定 Map

中映射關系的初始容量和預設的加載因子(0.75)建立的。

t

- 其映射關系将存放在此映射中的映射。

NullPointerException

- 如果指定映射為 null。
1.2
方法詳細資訊

size

public int          size                ()      
指定者:
接口

Map<K,V>

中的

size

Dictionary<K,V>

size

傳回:
此哈希表中的鍵的數量。

isEmpty

public boolean          isEmpty                ()      

Map<K,V>

isEmpty

Dictionary<K,V>

isEmpty

如果此哈希表沒有将任何鍵映射到值,則傳回

true

;否則傳回

false

keys

public Enumeration<K>          keys                ()      

Dictionary<K,V>

keys

此哈希表中的鍵的枚舉。

Enumeration

elements()

keySet()

Map

elements

public Enumeration<V>          elements                ()      
傳回此哈希表中的值的枚舉。對傳回的對象使用 Enumeration 方法,以便按順序擷取這些元素。

Dictionary<K,V>

elements

此哈希表中的值的枚舉。

Enumeration

keys()

values()

Map

contains

public boolean          contains                (Object value)      
測試此映射表中是否存在與指定值關聯的鍵。此操作比

containsKey

方法的開銷更大。

注意,此方法在功能上等同于

containsValue

方法,containValue 是 collection 架構中

Map

接口的一部分。

value

- 要搜尋的值。
當且僅當此哈希表中某個鍵映射到

value

參數(由 equals 方法确定)時,傳回

true

false

NullPointerException

- 如果該值為

null

containsValue

public boolean          containsValue                (Object value)      
如果此 Hashtable 将一個或多個鍵映射到此值,則傳回 true。

Map<K,V>

containsValue

value

- 将要測試是否存在此哈希表中的值
如果此映射将一個或多個鍵映射到指定值,則傳回 true

NullPointerException

null

containsKey

public boolean          containsKey                (Object key)      

Map<K,V>

containsKey

key

- 可能的鍵
當且僅當指定對象(由 equals 方法确定)是此哈希表中的鍵時,才傳回

true

false

NullPointerException

- 如果該鍵為

null

contains(Object)

get

public V          get                (Object key)      

null

.

Map<K,V>

get

Dictionary<K,V>

get

key

- 要傳回其相關值的鍵
指定鍵映射到的值,如果此映射不包含到鍵的映射,則傳回

null

NullPointerException

- 如果指定鍵為 null

put(Object, Object)

rehash

protected void          rehash                ()      
增加此哈希表的容量并在内部對其進行重組,以便更有效地容納和通路其元素。當哈希表中的鍵的數量超出哈希表的容量和加載因子時,自動調用此方法。

put

public V          put                (K key,
             V value)      

key

value

。鍵和值都不可以為

null

Map<K,V>

put

Dictionary<K,V>

put

key

- 哈希表的鍵

value

- 值
此哈希表中指定鍵的以前的值;如果不存在該值,則傳回

null

NullPointerException

- 如果鍵或值為

null

Object.equals(Object)

get(Object)

remove

public V          remove                (Object key)      
從哈希表中移除該鍵及其相應的值。如果該鍵不在哈希表中,則此方法不執行任何操作。

Map<K,V>

remove

Dictionary<K,V>

remove

key

- 需要移除的鍵
此哈希表中與該鍵存在映射關系的值;如果該鍵沒有映射關系,則傳回

null

NullPointerException

null

putAll

public void          putAll                (Map<? extends K,? extends V> t)      

Map<K,V>

putAll

t

- 将存儲在此映射中的映射關系。

NullPointerException

- 如果指定的映射為 null。

clear

public void          clear                ()      

Map<K,V>

clear

clone

public Object          clone                ()      
建立此哈希表的淺表副本。複制哈希表自身的所有結構,但不複制它的鍵和值。這是一個開銷相對較大的操作。
覆寫:

Object

clone

哈希表的一個副本

Cloneable

toString

public String          toString                ()      

(逗号加空格)分隔開的、括在括号中的一組條目。每個條目都按以下方式呈現:鍵,一個等号 = 和相關元素,其中 toString

方法用于将鍵和元素轉換為字元串。

Object

toString

此哈希表的字元串表示形式

keySet

public Set<K>          keySet                ()      

Set

視圖。此 set 受映射支援,是以對映射的更改可在

set 中反映出來,反之亦然。如果在此 set 上的疊代器處于進行中時修改此映射(除非通過疊代器自身的 remove

操作),則疊代器的結果是不确定的。通過

Iterator.remove、Set.remove、removeAll、

retainAll、和 clear 操作,此 set 支援元素移除,可從映射中移除相應的映射關系。它不支援

add 或 addAll 操作。

Map<K,V>

keySet

此映射中包含的鍵的 set 視圖

entrySet

public Set<Map.Entry<K,V>>          entrySet                ()      

Set

操作,或通過由疊代器傳回的映射條目上的 setValue 操作),則疊代器的結果是不确定的。通過

retainAll、 和 clear 操作,此set 支援元素移除,可從映射中移除相應的映射關系。它不支援

Map<K,V>

entrySet

此映射中包含的映射關系的 set 視圖

values

public Collection<V>          values                ()      

Collection

視圖。此

collection 受映射支援,是以對映射的更改可在 collection 中反映出來,反之亦然。如果在此 collection

上的疊代器處于進行中時修改此映射(除非通過疊代器自身的 remove 操作),則疊代器的結果是不确定的。通過

Iterator.remove、Collection.remove、removeAll、

Map<K,V>

values

此映射中包含的值的 collection 視圖

equals

public boolean          equals                (Object o)      

Map<K,V>

equals

Object

equals

o

- 将與此哈希表進行比較相等性的對象
如果指定的 Object 與此 Map 相等,則傳回 true。

Map.equals(Object)

hashCode

public int          hashCode                ()      

Map<K,V>

hashCode

Object

hashCode

此對象的一個哈希碼值。

Map.hashCode()