web-dev-qa-db-ja.com

HashTableは挿入順序を維持しますか?

次のコードは、同じ挿入順序で出力を提供します。 javadocを読みましたが、挿入順序についても話していませんでした。誰かが私が正しい情報を得るのを手伝ってくれますか?.

import Java.util.*;

public class hash {

public static void main(String[] args) {

    String str[] = { "japan",
            "usa",
            "japan",
            "russia",
            "usa",
            "japan",
            "japan",
            "australia"};
    int len = 8;
    Hashtable ht = new Hashtable();
    int i = 0;
    while (i < len) {

        String c = str[i];
        System.out.println("c :" + c);
        Integer intg = (Integer) ht.get(c);

        if (intg == null)
            ht.put(c, new Integer(1));
        else
            ht.put(c, new Integer(intg.intValue() + 1));

        i++;
    }

    Enumeration k = ht.keys();

    while (k.hasMoreElements()) {
        String key = (String) k.nextElement();
        System.out.println(key + " > " + ht.get(key));
    }
}
}
20
wayfare

いいえ、違います。挿入順序を維持するには、代わりにJava.util.LinkedHashMapjavadoc )を使用します。

また、HashMapには不要な同時実行オーバーヘッドがあるため、HashtableHashtableより優先されるようになりました。 ( HashMapとHashtableの違い? を参照してください。)

40

いいえ、違います。 「ハッシュ」の順序のみを認識します。文字列を並べ替えると、ハッシュテーブルから同じ順序で表示されます。

9
jcomeau_ictx

Hashtableは、順序を維持するためではなく、高速ルックアップに使用されます。 LinkedHashMapまたはその他のデータ構造を調べる必要があります。

5
fastcodejava

LinkedHashMapは、要素の挿入順序を維持するために使用されます。

4
Akash5288

MapJavadocから。

マップの順序は、マップのコレクションビューのイテレータが要素を返す順序として定義されます。 TreeMapクラスなどの一部のマップ実装は、その順序に関して特定の保証を行います。 HashMapクラスのような他のものはそうではありません。

また、HashtableとHashMapのコードの内部を調べることは非常に便利です。

3
Donz