2017-07-12 10 views
-1

Putメソッドを使用した後、ハッシュテーブルの値の順序を知りたい。例えばHashTableはどのように注文しますか?

a   b   c  d     e 
Normal 2 weeks  Next Save and Finish  Go to Cases 

hashtable.put( "A"、 "ノーマル")。 ...

値の順序は、私たちが入力した順序とは異なります。問題を解決するためのデータ構造を提案する

b   a  e    c   d      
2 weeks Normal Go to Cases Next  Save and Finish 

てください: 私は順序は次のようになると思います。

ありがとうございました。

+2

'HashTable'は、挿入順序を維持し保証するものではありません。 [LinkedHashMap](https://docs.oracle.com/javase/8/docs/api/java/util/LinkedHashMap.html)を検討してください。 – bradimus

+2

彼らはブレンダーに入れて、各ピッキングを選んで注文します。 (注文はありません) – byxor

+0

問題を解決したり、コンセプトを理解するのを助けてくれた回答を受け入れてください。 Broはまた、あなたは彼らに報いを与え、答えを受け入れることによって、またすべての回答が受け入れられるように、また+2の利益を得ることによって、ユーザーを助けることを奨励します。 – Yahya

答えて

2

HashMapと同様に、HashTableは要素の挿入順序を保証しません。
HashTable

理由は、高速ルックアップのために最適化されています。これは、格納されているキー値のハッシュを計算することによって実現されます。これにより、HashTableの任意の値の検索がO(1)であることが確認され、HashTableの数字エントリに関係なく同じ時間がかかります。

したがって、エントリはkeyに対して生成されたハッシュに基づいて格納されます。これは、HashTableが挿入された要素の順序を保証しない理由です。

メッセージダイジェストとも呼ばれるハッシュ値(または単純にハッシュ値)は、文字列から生成された数値です。ハッシュはテキスト自体よりも実質的に小さく、他のテキストが同じハッシュ値を生成する可能性は非常に低い方法で式によって生成されます。

http://www.webopedia.com/TERM/H/hashing.html
http://interactivepython.org/runestone/static/pythonds/SortSearch/Hashing.html

+0

あなたの素晴らしい答えに感謝します。 –

6

のように非常に多くの場合、これらのケースでは、答えはin the documentationです:

このクラスはマップの順序について保証しません。特に、注文が時間の経過とともに一定であることを保証するものではありません。

1

前述したように、ハッシュテーブル反復順序はちょうどカジュアルです。挿入された順序を保持する場合は、LinkedHashMapを使用します。自然順序または事前定義された順序を取得する場合は、TreeMapを使用します。ナチュラルオーダーでは、Comparableインターフェースを実装するようなString、Integer、Longなどのキーの順序は、Comparableを実装する他のクラスと同様に自動的にソートされます。あらかじめ定義された順序は、Comparatorでも提供され、TreeMapが作成されます。

関連する問題