rastaman:
私は私が私のリンクハッシュマップからエントリのリンクリストを得ることができるかどうかを理解しようとしています。私は得ることができentrySet()
、私は挿入順に各エントリを介して取得イテレータを使用して、その後と。これは私の挿入順序のエントリのリンクリストを提供します。
私が使用している場合、私は同じ結果を保証できるvalues()
方法を?
ニコラス:
Javaの8のとおり、ののソースを見てみましょうLinkedHashMap
。私たちは、から内部動作を控除することができますentrySet()
し、values()
メソッドの定義:
- メソッドの
entrySet()
戻りnew LinkedEntrySet()
使用ライン627上のnew LinkedEntryIterator()
ライン634のようなイテレータとして。 - メソッドの
values()
戻りnew LinkedValues()
使用ライン581上の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()
。