簡體   English   中英

Map.containsKey()在沒有空值的Map中有用嗎?

[英]Is Map.containsKey() useful in a Map that has no null values?

在下面的代碼中:

if (map.containsKey(key)) {
    map.remove(key);
}

查看性能,在嘗試從地圖中刪除值之前首先執行Map.containsKey()檢查是否有用?

同樣的問題是檢索值,如果您知道地圖不包含null值,首先執行包含檢查是否有用?

if (map.containsKey(key)) {
    Object value = map.get(key);
}

如果沒有key映射,則remove返回null ,不會拋出異常:

public V remove(Object key)

我看不出有任何理由來執行if試圖刪除前key ,也許也許,如果要統計有多少個項目,其中從地圖上刪除..

在第二個示例中,如果key不存在,則將為null 是否檢查,取決於您的邏輯。

盡量不要浪費你的時間考慮性能, containsKeyO(1)時間復雜度

此實現為基本操作提供恆定時間性能( getput

在嘗試從地圖中刪除值之前首先執行Map.containsKey()檢查是否有用?

不,這會適得其反:

  • 如果物品不在那里,你會看到沒有區別
  • 如果物品在那里,你最終會有兩個查找。

如果要無條件地刪除該項,只需調用map.remove(key)

同樣的問題是檢索值

這里適用相同的邏輯。 當然你需要檢查結果為null ,所以在這種情況下, if留在那里。

請注意,此清理練習首先是關於可讀性,然后是關於性能的。 訪問地圖是一種快速操作,因此訪問它兩次不太可能導致重大性能問題,除了一些相當極端的情況。 但是,刪除額外的條件將使您的代碼更具可讀性,這非常重要。

remove()上的Java文檔聲明只有在map包含這樣的元素時才會刪除元素。 所以remove()之前的contains()檢查是多余的。

這是主觀的(完全是樣式的情況),但是對於你正在檢索值的情況,我更喜歡對null檢查的contains(key)調用。 布爾比較感覺比空比較好。 如果Map<K,V>.get(key)返回Optional<V> Map<K,V>.get(key)我可能會有不同的感受。

此外,值得注意的是“給定無空鍵”斷言是一個相當難以證明的斷言,具體取決於Map的類型(您可能不知道)。 一般來說,我認為對檢索的冗余檢查是(或者只是感覺 )更安全,以防萬一在其他地方出現錯誤(敲木頭,檢查黑貓,並避免出路上的梯子)。

對於移除操作,您可以找到。 檢查沒用。

暫無
暫無

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

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