私は Java のドキュメントと、LinkedHashMaps がkeyset()
順序を維持していることをこの投稿で読みました。
LinkedHashMap オブジェクトからキーと値が返される順序は保証されていますか?
私の質問は、それが順序を保証するのであれば、なぜのソースコードが のような順序を保証するLinkedHashMap
タイプのオブジェクトを返さないのですか?Set
LinkedHashSet
私が考えることができる理由の 1 つは、LinkedHashSet がメモリ割り当てを増やすマップを使用することです (AbstractSet の実装方法によって異なります)。キーセットの将来の実装を証明するためでもありますか?
この回答がこの投稿で述べているように:リストまたはコレクションを使用する方が良いですか?
リストを返すことは、最適なインターフェイスへのプログラミングと一致しています。
コレクションを返すと、返されるコレクションがセット、リスト、またはキューのいずれかになる可能性があるため、ユーザーにはあいまいさが生じます。
では、のドキュメントを読まずに、keyset()
これは曖昧ではありませんか?
keyset()
ソースコード:
public Set<K> keySet() {
Set<K> ks = keySet;
return (ks != null ? ks : (keySet = new KeySet()));
}
private final class KeySet extends AbstractSet<K> {
public Iterator<K> iterator() {
return newKeyIterator();
}
public int size() {
return size;
}
public boolean contains(Object o) {
return containsKey(o);
}
public boolean remove(Object o) {
return HashMap.this.removeEntryForKey(o) != null;
}
public void clear() {
HashMap.this.clear();
}
}