簡體   English   中英

為什么在 Map 接口中有一個 'remove(key, value)' 方法?

[英]Why is there a 'remove(key, value)' method in the Map interface?

我剛剛發現Map公開了一種方法,用於“ 僅當指定鍵當前映射到指定值時才[刪除]該條目。 ”。 它被定義為:

default boolean remove(Object key, Object value)

我沒有想出將此方法包含在我自己的自定義地圖界面中的理由。 我很好奇,為什么會有人想要這樣做? 有人可以提供一個默認remove(key)不可替代的算法示例(沒有“值”參數)嗎?

該方法的 Javadoc 對其進行了解釋:

對於這個 map,默認實現等效於:

 if (map.containsKey(key) && Objects.equals(map.get(key), value)) { map.remove(key); return true; } else return false;

默認實現不保證此方法的同步或原子性屬性。 任何提供原子性保證的實現都必須覆蓋此方法並記錄其並發屬性。

一般來說,只要你沒有原子性保證,就不要覆蓋它並使用上面的默認實現。

當多個線程訪問同一個 Map 時,這在並發編程中很有用。您需要一個ConcurrentHashMap ,它為remove(Object, Object)提供原子性保證。

例如,像那樣(假設ConcurrentHashMap<String, String> cache在線程之間共享):

String key = ...;
String value = cache.get(key);
//long lasting operation
cache.remove(key, value);

在那個“持久操作”期間,另一個線程可能已經更新了分配給key的值。 如果密鑰仍被分配給與以前相同的值,您只希望刪除該密鑰。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM