2017-12-01 6 views
-1

私は、HashMapHashSetの両方が順番に値を返していないのだろうかと疑問に思っていましたか? 誰か明確にしてください。 私は混乱しています。なぜこれらの2つが必要ですか?HashMapとHashSet値の順序は何ですか

+2

を参照してくださいhttps://docs.oracle.com/javase/8/docs/api/java/util/HashSet.html、「それは保証しませんセットの反復順序に、特に順序が時間の経過とともに一定であることを保証するものではありません。 –

+0

挿入順に反復処理できるデータ構造を探している場合は、[LinkedHashSet](https://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashSet.html)を使用できます。 )または[LinkedHashMap](https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashMap.html) – luckydog32

+0

['SortedSet'](https://docs.oracle)の実装を使用してください。 。あなたが注文を気にしているならば、(com/javase/9/docs/api/java/util/SortedSet.html)( 'Set'のサブインターフェース)。 –

答えて

1

単語で - はい。 HashMapまたはHashSetは、反復の順序を保証しません。

0

HashMapには、キー値のペアが格納されます。 HashSetは、繰り返しのないオブジェクトの順序付けられていないコレクションです。必ずしも順番に挿入されていなくても反復されない。順序付けられた実装がありますが、標準のHashMapまたはHashSetクラスは使用しません。さらにhere

Linked Hash Mapについて話しました

は、あなたが順番に値をしたい場合、あなたは賢明なあなたはどこのキーでソートするのTreeMapを使用することができ、他のLinkedHasmapを使用する必要が挿入挿入順

0

を維持しません。ハッシュは、オブジェクトに依存して変化する可能性のある値を順序付けするためにハッシュコードを使用するため、順序を与えません。

0

HashMapはMapインターフェイスの実装です。地図は、Aが、我々は1を探したびは、特派員は「テスト」であることを知っているような場合にはB.

Map<Integer, String> map = new HashMap<Integer, String>(); 
map.put(new Integer(1), "Test"); 

に対応していることを言うためのデータ構造です。

セットは全く異なるものです。 Setsは、コレクションに複製オブジェクトが存在しないことを保証します。 HashSetはSetインターフェイスの実装です。あなたはそれをラッピングのLinkedHashMap、LinkedHashSetの、ArrayListを(Listインタフェースの実装)など

を使用することができます順番に挿入し、何かを取得するに

  • 地図 - オブジェクト
  • セットの対応します - コレクション内の一意のオブジェクトを確認する
+0

質問は順序であり、地図とセットの違いではありません –

+0

@SteveKuo質問は** "私は混乱しています、なぜこれら2つが必要ですか?" ** –

+1

本当に 'java.util.Map'には'set'メソッド? – Bedla

1

HashMap APIは反復の順序を定義しません。

しかし、HashMapの実装を見ると、反復順序、キーのハッシュ値、キーが挿入された順序、およびハッシュテーブルのサイズの間に複雑な過渡的な関係があることが推論できます。この関係は、ハッシュテーブル自体のサイズが変更された場合にスクランブルされます。

参照してください:特に

Is the order of values retrieved from a HashMap the insertion order

関連する問題