鴻蒙OS Hashtable

2022-07-25 15:01 更新

Hashtable

java.lang.Object

|---java.util.Dictionary<K,V&

|---|---java.util.Hashtable<K,V&

public class Hashtable<K,V>
extends Dictionary<K,V>
implements Map<K,V>, Cloneable, Serializable

這個類實現(xiàn)了一個哈希表,它將鍵映射到值。 任何非空對象都可以用作鍵或值。

要成功地從哈希表中存儲和檢索對象,用作鍵的對象必須實現(xiàn) hashCode 方法和 equals 方法。

Hashtable 的實例有兩個影響其性能的參數(shù):初始容量和負載因子。 容量是哈希表中的桶數(shù),初始容量只是哈希表創(chuàng)建時的容量。 注意哈希表是開放的:在“哈希沖突”的情況下,單個桶存儲多個條目,必須按順序搜索。 負載因子是哈希表在其容量自動增加之前允許達到的程度的度量。 初始容量和負載因子參數(shù)只是實現(xiàn)的提示。 關(guān)于何時以及是否調(diào)用 rehash 方法的確切細節(jié)取決于實現(xiàn)。

通常,默認負載因子 (.75) 在時間和空間成本之間提供了良好的折衷。 較高的值會減少空間開銷,但會增加查找條目的時間成本(這反映在大多數(shù) Hashtable 操作中,包括 get 和 put)。

初始容量控制了浪費空間和需要重新哈希操作之間的權(quán)衡,這些操作非常耗時。 如果初始容量大于 Hashtable 將包含的最大條目數(shù)除以其負載因子,則不會發(fā)生重新哈希操作。 但是,將初始容量設(shè)置得太高會浪費空間。

如果要在 Hashtable 中創(chuàng)建許多條目,則創(chuàng)建具有足夠大容量的條目可能比讓它根據(jù)需要執(zhí)行自動重新散列以增長表來更有效地插入條目。

此示例創(chuàng)建一個數(shù)字哈希表。 它使用數(shù)字的名稱作為鍵:

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

要檢索數(shù)字,請使用以下代碼:

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

由此類的所有“集合視圖方法”返回的集合的迭代器方法返回的迭代器是快速失敗的:如果在創(chuàng)建迭代器后的任何時間對 Hashtable 進行結(jié)構(gòu)修改,除了通過迭代器自己的刪除之外的任何方式 方法,迭代器將拋出 ConcurrentModificationException。 因此,面對并發(fā)修改,迭代器快速而干凈地失敗,而不是在未來不確定的時間冒任意的、非確定性的行為。 Hashtable 的鍵和元素方法返回的枚舉不是快速失敗的。

請注意,不能保證迭代器的快速失敗行為,因為一般來說,在存在不同步的并發(fā)修改的情況下,不可能做出任何硬保證。 快速失敗的迭代器會盡最大努力拋出 ConcurrentModificationException。 因此,編寫一個依賴于這個異常的正確性的程序是錯誤的:迭代器的快速失敗行為應(yīng)該只用于檢測錯誤。

從 Java 2 平臺 v1.2 開始,該類被改進為實現(xiàn) Map 接口,使其成為 Java Collections Framework 的成員。 與新的集合實現(xiàn)不同,Hashtable 是同步的。 如果不需要線程安全的實現(xiàn),建議使用 HashMap 代替 Hashtable。 如果需要線程安全的高并發(fā)實現(xiàn),那么建議使用 ConcurrentHashMap 代替 Hashtable。

嵌套類摘要

從接口 java.util.Map 繼承的嵌套類/接口
Map.EntryK,V

構(gòu)造函數(shù)摘要

構(gòu)造函數(shù) 描述
Hashtable() 構(gòu)造一個具有默認初始容量 (11) 和加載因子 (0.75) 的新的空哈希表。
Hashtable(int initialCapacity) 使用指定的初始容量和默認加載因子 (0.75) 構(gòu)造一個新的空哈希表。
Hashtable(int initialCapacity, float loadFactor) 使用指定的初始容量和指定的負載因子構(gòu)造一個新的空哈希表。
Hashtable(Map<? extends K,? extends V> t) 構(gòu)造一個與給定 Map 具有相同映射的新哈希表。

方法總結(jié)

修飾符和類型 方法 描述
void clear() 清除此哈希表,使其不包含任何鍵。
Object clone() 創(chuàng)建此哈希表的淺表副本。
V compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction) 嘗試計算指定鍵及其當(dāng)前映射值的映射(如果沒有當(dāng)前映射,則為 null)。
V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction) 如果指定的鍵尚未與值關(guān)聯(lián)(或映射為 null),則嘗試使用給定的映射函數(shù)計算其值并將其輸入到此映射中,除非為 null。
V computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction) 如果指定鍵的值存在且非空,則嘗試在給定鍵及其當(dāng)前映射值的情況下計算新映射。
boolean contains(Object value) 測試某些鍵是否映射到此哈希表中的指定值。
boolean containsKey(Object key) 測試指定對象是否是此哈希表中的鍵。
boolean containsValue(Object value) 如果此哈希表將一個或多個鍵映射到此值,則返回 true。
EnumerationV elements() 返回此哈希表中的值的枚舉。
SetMap.EntryK,V entrySet() 返回此映射中包含的映射的 Set 視圖。
boolean equals(Object o) 根據(jù) Map 接口中的定義,比較指定的 Object 與此 Map 是否相等。
void forEach(BiConsumer<? super K,? super V> action) 對該映射中的每個條目執(zhí)行給定的操作,直到處理完所有條目或該操作引發(fā)異常。
V get(Object key) 返回指定鍵映射到的值,如果此映射不包含該鍵的映射,則返回 null。
V getOrDefault(Object key, V defaultValue) 返回指定鍵映射到的值,如果此映射不包含該鍵的映射,則返回 defaultValue。
int hashCode() 根據(jù) Map 接口中的定義返回此 Map 的哈希碼值。
boolean isEmpty() 測試此哈希表是否沒有將鍵映射到值。
EnumerationK keys() 返回此哈希表中鍵的枚舉。
SetK keySet() 返回此映射中包含的鍵的 Set 視圖。
V merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction) 如果指定的鍵尚未與值關(guān)聯(lián)或與 null 關(guān)聯(lián),則將其與給定的非 null 值關(guān)聯(lián)。
V put(K key, V value) 將指定鍵映射到此哈希表中的指定值。
void putAll(Map<? extends K,? extends V> t) 將所有映射從指定映射復(fù)制到此哈希表。
V putIfAbsent(K key, V value) 如果指定的鍵尚未與值關(guān)聯(lián)(或映射到 null),則將其與給定值關(guān)聯(lián)并返回 null,否則返回當(dāng)前值。
protected void rehash() 增加此哈希表的容量并在內(nèi)部重新組織此哈希表,以便更有效地容納和訪問其條目。
V remove(Object key) 從此哈希表中刪除鍵(及其對應(yīng)的值)。
boolean remove(Object key, Object value) 僅當(dāng)當(dāng)前映射到指定值時,才刪除指定鍵的條目。
V replace(K key, V value) 僅當(dāng)當(dāng)前映射到某個值時才替換指定鍵的條目。
boolean replace(K key, V oldValue, V newValue) 僅當(dāng)當(dāng)前映射到指定值時才替換指定鍵的條目。
void replaceAll(BiFunction<? super K,? super V,? extends V> function) 將每個條目的值替換為對該條目調(diào)用給定函數(shù)的結(jié)果,直到所有條目都已處理或該函數(shù)引發(fā)異常。
int size() 返回此哈希表中的鍵數(shù)。
String toString() 以一組條目的形式返回此 Hashtable 對象的字符串表示形式,用大括號括起來并由 ASCII 字符“、”(逗號和空格)分隔。
CollectionV values() 返回此映射中包含的值的集合視圖。
從類 java.lang.Object 繼承的方法
finalize, getClass, notify, notifyAll, wait, wait, wait

構(gòu)造函數(shù)詳細信息

Hashtable

public Hashtable(int initialCapacity, float loadFactor)

使用指定的初始容量和指定的負載因子構(gòu)造一個新的空哈希表。

參數(shù):

參數(shù)名稱 參數(shù)描述
initialCapacity 哈希表的初始容量。
loadFactor 哈希表的負載因子。

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果初始容量小于零,或者負載因子為非正數(shù)。

Hashtable

public Hashtable(int initialCapacity)

使用指定的初始容量和默認加載因子 (0.75) 構(gòu)造一個新的空哈希表。

參數(shù):

參數(shù)名稱 參數(shù)描述
initialCapacity 哈希表的初始容量。

Throws:

Throw名稱 Throw描述
IllegalArgumentException 如果初始容量小于零。

Hashtable

public Hashtable()

構(gòu)造一個具有默認初始容量 (11) 和加載因子 (0.75) 的新的空哈希表。

Hashtable

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

構(gòu)造一個與給定 Map 具有相同映射的新哈希表。 哈希表的初始容量足以容納給定 Map 中的映射和默認加載因子 (0.75)。

參數(shù):

參數(shù)名稱 參數(shù)描述
t 其映射將放置在此 map 中的 map。

Throws:

Throw名稱 Throw描述
NullPointerException 如果指定的 map 為空。

方法詳情

size

public int size()

返回此哈希表中的鍵數(shù)。

指定者:

接口 MapK,V 中的大小

指定者:

DictionaryK,V 類中的大小

返回:

此哈希表中的鍵數(shù)。

isEmpty

public boolean isEmpty()

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

指定者:

接口 MapK,V 中的 isEmpty

指定者:

類 DictionaryK,V 中的 isEmpty

返回:

如果此哈希表沒有將鍵映射到值,則為 true; 否則為 false。

keys

public EnumerationK keys()

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

指定者:

DictionaryK,V 類中的鍵

返回:

此哈希表中鍵的枚舉。

elements

public EnumerationV elements()

返回此哈希表中的值的枚舉。 對返回的對象使用 Enumeration 方法按順序獲取元素。

指定者:

DictionaryK,V 類中的元素

返回:

此哈希表中的值的枚舉。

contains

public boolean contains(Object value)

測試某些鍵是否映射到此哈希表中的指定值。 此操作比 containsKey 方法更昂貴。

請注意,此方法在功能上與 containsValue 相同(它是集合框架中 Map 接口的一部分)。

參數(shù):

參數(shù)名稱 參數(shù)描述
value 要搜索的值

返回:

當(dāng)且僅當(dāng)某些鍵映射到由 equals 方法確定的此哈希表中的 value 參數(shù)時,才為 true; 否則為 false。

Throws:

Throw名稱 Throw描述
NullPointerException 如果 value 為空

containsValue

public boolean containsValue(Object value)

如果此哈希表將一個或多個鍵映射到此值,則返回 true。

請注意,此方法在功能上與 contains 相同(早于 Map 接口)。

指定者:

接口 MapK,V 中的 containsValue

參數(shù):

參數(shù)名稱 參數(shù)描述
value 要測試其在此哈希表中的存在的值

返回:

如果此映射將一個或多個鍵映射到指定值,則為 true

Throws:

Throw名稱 Throw描述
NullPointerException 如果 value 為空

containsKey

public boolean containsKey(Object key)

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

指定者:

containsKey 在接口 MapK,V

參數(shù):

參數(shù)名稱 參數(shù)描述
key 可能的 key

返回:

當(dāng)且僅當(dāng)指定對象是此哈希表中的鍵(由 equals 方法確定)時才為 true; 否則為false。

Throws:

Throw名稱 Throw描述
NullPointerException 如果 key 為空

get

public V get(Object key)

返回指定鍵映射到的值,如果此映射不包含該鍵的映射,則返回 null。

更正式地說,如果此映射包含從鍵 k 到值 v 的映射,滿足 (key.equals(k)),則此方法返回 v; 否則返回null。 (最多可以有一個這樣的映射。)

指定者:

進入接口 MapK,V

指定者:

進入類 DictionaryK,V

參數(shù):

參數(shù)名稱 參數(shù)描述
key 要返回其關(guān)聯(lián)值的鍵

返回:

指定鍵映射到的值,如果此映射不包含該鍵的映射,則為 null

Throws:

Throw名稱 Throw描述
NullPointerException 如果指定的鍵為空

rehash

protected void rehash()

增加此哈希表的容量并在內(nèi)部重新組織此哈希表,以便更有效地容納和訪問其條目。 當(dāng)哈希表中的鍵數(shù)超過此哈希表的容量和負載因子時,將自動調(diào)用此方法。

put

public V put(K key, V value)

將指定鍵映射到此哈希表中的指定值。 鍵和值都不能為空。

可以通過使用與原始鍵相同的鍵調(diào)用 get 方法來檢索該值。

指定者:

放入接口 MapK,V

指定者:

放入類 DictionaryK,V

參數(shù):

參數(shù)名稱 參數(shù)描述
key 哈希表鍵
value

返回:

此哈希表中指定鍵的前一個值,如果沒有,則返回 null

Throws:

Throw名稱 Throw描述
NullPointerException 如果 key 或者 value 為空

remove

public V remove(Object key)

從此哈希表中刪除鍵(及其對應(yīng)的值)。 如果鍵不在哈希表中,則此方法不執(zhí)行任何操作。

指定者:

在接口 MapK,V 中刪除

指定者:

在類 DictionaryK,V 中刪除

參數(shù):

參數(shù)名稱 參數(shù)描述
key 需要刪除的密鑰

返回:

鍵在此哈希表中映射到的值,如果鍵沒有映射,則返回 null

Throws:

Throw名稱 Throw描述
NullPointerException 如果 key 為空

putAll

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

將所有映射從指定映射復(fù)制到此哈希表。 這些映射將替換此哈希表對當(dāng)前指定映射中的任何鍵的任何映射。

指定者:

putAll在接口MapK,V中

參數(shù):

參數(shù)名稱 參數(shù)描述
t 要存儲在此 map 中的映射

Throws:

Throw名稱 Throw描述
NullPointerException 如果指定的 map 為空

clear

public void clear()

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

指定者:

在 interface MapK,V 中清除

clone

public Object clone()

創(chuàng)建此哈希表的淺表副本。 哈希表本身的所有結(jié)構(gòu)都被復(fù)制,但鍵和值沒有被克隆。 這是一個相對昂貴的操作。

覆蓋:

在類 Object 中克隆

返回:

哈希表的克隆

toString

public String toString()

以一組條目的形式返回此 Hashtable 對象的字符串表示形式,用大括號括起來并由 ASCII 字符“、”(逗號和空格)分隔。 每個條目都呈現(xiàn)為鍵、等號 = 和關(guān)聯(lián)的元素,其中 toString 方法用于將鍵和元素轉(zhuǎn)換為字符串。

覆蓋:

類 Object 中的 toString

返回:

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

keySet

public SetK keySet()

返回此映射中包含的鍵的 Set 視圖。 集合由地圖支持,因此對地圖的更改會反映在集合中,反之亦然。 如果在對集合進行迭代時修改了映射(通過迭代器自己的刪除操作除外),則迭代的結(jié)果是不確定的。 該集合支持元素移除,即通過 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作從映射中移除相應(yīng)的映射。 它不支持 add 或 addAll 操作。

指定者:

接口 MapK,V 中的 keySet

返回:

此 map 中包含的鍵的集合視圖

entrySet

public SetMap.EntryK,V entrySet()

返回此映射中包含的映射的 Set 視圖。 集合由地圖支持,因此對地圖的更改會反映在集合中,反之亦然。 如果在對集合進行迭代時修改了映射(通過迭代器自己的刪除操作或通過迭代器返回的映射條目上的 setValue 操作除外),則迭代的結(jié)果是未定義的。 該集合支持元素移除,即通過 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作從映射中移除相應(yīng)的映射。 它不支持 add 或 addAll 操作。

指定者:

接口 MapK,V 中的 entrySet

返回:

此 map 中包含的映射的集合視圖

values

public CollectionV values()

返回此映射中包含的值的集合視圖。 集合由地圖支持,因此對地圖的更改會反映在集合中,反之亦然。 如果在對集合進行迭代時修改了映射(通過迭代器自己的刪除操作除外),則迭代的結(jié)果是不確定的。 該集合支持元素移除,即通過 Iterator.remove、Collection.remove、removeAll、retainAll 和 clear 操作從映射中移除相應(yīng)的映射。 它不支持 add 或 addAll 操作。

指定者:

接口 MapK,V 中的值

返回:

此 map 中包含的值的集合視圖

equals

public boolean equals(Object o)

根據(jù) Map 接口中的定義,比較指定的 Object 與此 Map 是否相等。

指定者:

接口 MapK,V 中的等于

覆蓋:

類 Object 中的等于

參數(shù):

參數(shù)名稱 參數(shù)描述
o 要與此哈希表比較是否相等的對象

返回:

如果指定的 Object 等于此 Map,則為 true

hashCode

public int hashCode()

根據(jù) Map 接口中的定義返回此 Map 的哈希碼值。

指定者:

接口 MapK,V 中的 hashCode

覆蓋:

類 Object 中的 hashCode

返回:

此對象的哈希碼值。

getOrDefault

public V getOrDefault(Object key, V defaultValue)

從接口復(fù)制的描述:map

返回指定鍵映射到的值,如果此映射不包含該鍵的映射,則返回 defaultValue。

指定者:

接口 MapK,V 中的 getOrDefault

參數(shù):

參數(shù)名稱 參數(shù)描述
key 要返回其關(guān)聯(lián)值的鍵
defaultValue 鍵的默認映射

返回:

指定鍵映射到的值,如果此映射不包含該鍵的映射,則為 defaultValue

forEach

public void forEach(BiConsumer<? super K,? super V> action)

從接口復(fù)制的描述:map

對該映射中的每個條目執(zhí)行給定的操作,直到處理完所有條目或該操作引發(fā)異常。 除非實現(xiàn)類另有規(guī)定,否則按照條目集迭代的順序執(zhí)行動作(如果指定了迭代順序)。動作拋出的異常將轉(zhuǎn)發(fā)給調(diào)用者。

指定者:

接口 MapK,V 中的 forEach

參數(shù):

參數(shù)名稱 參數(shù)描述
action 為每個條目執(zhí)行的操作

replaceAll

public void replaceAll(BiFunction<? super K,? super V,? extends V> function)

從接口復(fù)制的描述:map

將每個條目的值替換為對該條目調(diào)用給定函數(shù)的結(jié)果,直到所有條目都已處理或該函數(shù)引發(fā)異常。 函數(shù)拋出的異常被轉(zhuǎn)發(fā)給調(diào)用者。

指定者:

接口 MapK,V 中的 replaceAll

參數(shù):

參數(shù)名稱 參數(shù)描述
function 應(yīng)用于每個條目的函數(shù)

putIfAbsent

public V putIfAbsent(K key, V value)

從接口復(fù)制的描述:map

如果指定的鍵尚未與值關(guān)聯(lián)(或映射到 null),則將其與給定值關(guān)聯(lián)并返回 null,否則返回當(dāng)前值。

指定者:

將IfAbsent放入接口MapK,V

參數(shù):

參數(shù)名稱 參數(shù)描述
key 與指定值關(guān)聯(lián)的鍵
value 與指定鍵關(guān)聯(lián)的值

返回:

與指定鍵關(guān)聯(lián)的前一個值,如果鍵沒有映射,則返回 null。 (如果實現(xiàn)支持 null 值,則返回 null 還可以指示映射先前將 null 與鍵關(guān)聯(lián)。)

remove

public boolean remove(Object key, Object value)

從接口復(fù)制的描述:map

僅當(dāng)當(dāng)前映射到指定值時,才刪除指定鍵的條目。

指定者:

在接口 MapK,V 中刪除

參數(shù):

參數(shù)名稱 參數(shù)描述
key 與指定值關(guān)聯(lián)的鍵
value 預(yù)期與指定鍵關(guān)聯(lián)的值

返回:

如果值已被刪除,則為 true

replace

public boolean replace(K key, V oldValue, V newValue)

從接口復(fù)制的描述:map

僅當(dāng)當(dāng)前映射到指定值時才替換指定鍵的條目。

指定者:

在接口 MapK,V 中替換

參數(shù):

參數(shù)名稱 參數(shù)描述
key 與指定值關(guān)聯(lián)的鍵
oldValue 預(yù)期與指定鍵關(guān)聯(lián)的值
newValue 與指定鍵關(guān)聯(lián)的值

返回:

如果值被替換,則為 true

replace

public V replace(K key, V value)

從接口復(fù)制的描述:map

僅當(dāng)當(dāng)前映射到某個值時才替換指定鍵的條目。

指定者:

在接口 MapK,V 中替換

參數(shù):

參數(shù)名稱 參數(shù)描述
key 與指定值關(guān)聯(lián)的鍵
value 與指定鍵關(guān)聯(lián)的值

返回:

與指定鍵關(guān)聯(lián)的前一個值,如果鍵沒有映射,則返回 null。 (如果實現(xiàn)支持 null 值,則返回 null 還可以指示映射先前將 null 與鍵關(guān)聯(lián)。)

computeIfAbsent

public V computeIfAbsent(K key, Function<? super K,? extends V> mappingFunction)

從接口復(fù)制的描述:map

如果指定的鍵尚未與值關(guān)聯(lián)(或映射為 null),則嘗試使用給定的映射函數(shù)計算其值并將其輸入到此映射中,除非為 null。

如果函數(shù)返回 null,則不記錄映射。 如果函數(shù)本身拋出(未經(jīng)檢查的)異常,則重新拋出異常,并且不記錄任何映射。 最常見的用法是構(gòu)造一個新對象作為初始映射值或記憶結(jié)果,如下所示:

  map.computeIfAbsent(key, k -> new Value(f(k))); 

或者實現(xiàn)一個多值映射,Map<K,Collection<V>>,每個鍵支持多個值:

  map.computeIfAbsent(key, k -> new HashSet<V>()).add(v); 

指定者:

接口 MapK,V 中的 computeIfAbsent

參數(shù):

參數(shù)名稱 參數(shù)描述
key 與指定值關(guān)聯(lián)的鍵
mappingFunction 計算值的函數(shù)

返回:

與指定鍵關(guān)聯(lián)的當(dāng)前(現(xiàn)有或計算的)值,如果計算的值為 null,則為 null

computeIfPresent

public V computeIfPresent(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)

從接口復(fù)制的描述:map

如果指定鍵的值存在且非空,則嘗試在給定鍵及其當(dāng)前映射值的情況下計算新映射。

如果函數(shù)返回 null,則刪除映射。 如果函數(shù)本身拋出(未經(jīng)檢查的)異常,則重新拋出異常,并且當(dāng)前映射保持不變。

指定者:

接口 MapK,V 中的 computeIfPresent

參數(shù):

參數(shù)名稱 參數(shù)描述
key 與指定值關(guān)聯(lián)的鍵
remappingFunction 計算值的函數(shù)

返回:

與指定鍵關(guān)聯(lián)的新值,如果沒有,則為 null

compute

public V compute(K key, BiFunction<? super K,? super V,? extends V> remappingFunction)

從接口復(fù)制的描述:map

嘗試計算指定鍵及其當(dāng)前映射值的映射(如果沒有當(dāng)前映射,則為 null)。 例如,要創(chuàng)建或附加 String msg 到值映射:

  map.compute(key, (k, v) -> (v == null) ? msg : v.concat(msg))

(方法 merge() 通常更容易用于此類目的。)

如果函數(shù)返回 null,則刪除映射(如果最初不存在,則保持不存在)。 如果函數(shù)本身拋出(未經(jīng)檢查的)異常,則重新拋出異常,并且當(dāng)前映射保持不變。

指定者:

在接口 MapK,V 中計算

參數(shù):

參數(shù)名稱 參數(shù)描述
key 與指定值關(guān)聯(lián)的鍵
remappingFunction 計算值的函數(shù)

返回:

與指定鍵關(guān)聯(lián)的新值,如果沒有,則為 null

merge

public V merge(K key, V value, BiFunction<? super V,? super V,? extends V> remappingFunction)

從接口復(fù)制的描述:map

如果指定的鍵尚未與值關(guān)聯(lián)或與 null 關(guān)聯(lián),則將其與給定的非 null 值關(guān)聯(lián)。 否則,將關(guān)聯(lián)的值替換為給定重映射函數(shù)的結(jié)果,如果結(jié)果為 null,則將其刪除。 當(dāng)為一個鍵組合多個映射值時,此方法可能很有用。 例如,要創(chuàng)建或附加 String msg 到值映射:

  map.merge(key, msg, String::concat) 

如果函數(shù)返回 null,則刪除映射。 如果函數(shù)本身拋出(未經(jīng)檢查的)異常,則重新拋出異常,并且當(dāng)前映射保持不變。

指定者:

在接口 MapK,V 中合并

參數(shù):

參數(shù)名稱 參數(shù)描述
key 與結(jié)果值關(guān)聯(lián)的鍵
value 要與鍵關(guān)聯(lián)的現(xiàn)有值合并的非空值,或者如果沒有現(xiàn)有值或空值與鍵關(guān)聯(lián),則與鍵關(guān)聯(lián)
remappingFunction 重新計算值的函數(shù)(如果存在)

返回:

與指定鍵關(guān)聯(lián)的新值,如果沒有值與該鍵關(guān)聯(lián),則為 null

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號