簡體   English   中英

remove() 是否更改 LinkedHashMap 中的迭代順序?

[英]Does remove() change iteration order in LinkedHashMap?

LinkedHashMap 底層有雙鏈表,可以在迭代過程中保留插入順序。 非結構性更改,即替換已插入鍵的值,不會影響迭代順序。 但是,我仍然想知道, remove(key) 操作是否會更改 LinkedHashMap 中的迭代順序 正如我在非常小的例子上測試過的那樣,它不會影響元素的順序,除了缺少的元素,顯然它在迭代期間不包括在內——但軼事不是證據。 據推測,刪除工作就像在 LinkedList 中一樣(其中列表拆分的兩半在元素的索引處連接在一起) - 另一方面,程序員可能應該考慮重新散列或重新分配。

我真的很困惑,在徹底閱讀了 LinkedHashMap 的文檔之后,我仍然非常懷疑,因為我需要一個結構來保留插入順序但可以輕松查找和刪除條目。

我真的很困惑,在仔細閱讀了 LinkedHashMap 的文檔之后,也仍然很懷疑......

是規范的相關部分。

“此鏈表定義了迭代順序,通常是將鍵插入 map的順序(插入順序)。請注意,如果將鍵重新插入 map,則插入順序不受影響。(鍵k如果在調用m.containsKey(k)之前立即返回 true 時調用m.put(k, v)則將重新插入到 map m中。” )

“通常”是指您可以創建迭代順序為訪問順序LinkedHashMap

這並沒有說明通過刪除更改剩余條目的順序。 事實上,如果一個實現(假設地)在刪除條目時確實改變了順序,那將明顯與關於迭代順序的不合格陳述相矛盾 換句話說,它不符合規范。

相反,如果規范編寫者打算刪除應該影響迭代順序,他們會明確說明。 就像他們確實提到“重新插入”不會影響它一樣。


作為一般規則,規范並不是為了准確說明在每種可能的情況下會發生什么。 如果屬性 Y 是指定屬性 X 的邏輯結果,則規范不需要(通常不會)明確地指定屬性 Y state。

規范編寫者假設讀者會自己做出正確的邏輯推理是正常的。

暫無
暫無

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

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