[英]Get LinkedList of entries from LinkedHashMap with values() method
我試圖了解我是否可以從鏈接的哈希映射中獲取條目的鏈接列表。 我可以獲取entrySet()
然后使用迭代器我通過插入順序中的每個條目。 這將為我提供插入順序中的條目鏈接列表。
如果我使用values()
方法,可以保證相同的結果嗎?
從Java 8開始,我們來看看LinkedHashMap
的來源。 我們可以從entrySet()
和values()
方法定義中扣除內部行為:
entrySet()
在第627行返回new LinkedEntrySet()
,它使用new LinkedEntryIterator()
作為第634行的迭代器。 values()
在第581行返回new LinkedValues()
,它使用new LinkedValueIterator()
作為第588行的迭代器。 現在,讓我們看一下從第737行開始在同一個文件中定義的內部類的來源:
final class LinkedValueIterator extends LinkedHashIterator
implements Iterator<V> {
public final V next() { return nextNode().value; }
}
final class LinkedEntryIterator extends LinkedHashIterator
implements Iterator<Map.Entry<K,V>> {
public final Map.Entry<K,V> next() { return nextNode(); }
}
它們都擴展了LinkedHashIterator
,這意味着使用entrySet()
和values()
將以相同的方式處理對map的值的訪問。
如果我使用
values()
方法,可以保證相同的結果嗎?
基本上, LinkedHashMap#values
返回內部結構的受限視圖。 我敢說它必須給出相同的結果。 它沒有在文檔中明確說明
返回此映射中包含的映射的
Set
視圖。 該集由地圖支持,因此對地圖的更改將反映在集中,反之亦然 。
但突出顯示的摘錄讓我這么認為。
“相同的結果”不僅僅是數據集合:它包括數據應該迭代的方式(迭代器)。 “對映射的更改反映在集合中”對我來說意味着兩個迭代器共享一個算法,這個算法在同一條數據上會產生相同的行為。
我認同。 在內部,類使用java.util.LinkedHashMap.LinkedHashIterator
,它由entrySet()
和values()
,因此如果前者允許您按插入順序進行迭代,則后者將執行相同的操作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.