0

HashMap配列から整数を追加する があります。キーは整数で、値は整数の重複数です。HashMapのキーを取得するためにを反復処理するHashMapと、ランダムな順序になっているように見えます。これらのキーが追加される特定の順序はありますか? これが私が繰り返している方法です。

       Set<String> a = names.keySet();
        Iterator i = a.iterator();

        while(i.hasNext())
            String t = (String) i.next();
4

2 に答える 2

4

実際、HashMap非決定論的 (予測不可能/信頼できない) 順序でエントリを返します。エントリをキー順に表示する場合 (つまり、2before 3)、TreeMap( javadoc ) を使用します。エントリを最初の挿入順に表示する場合は、LinkedHashMap( javadoc )を使用します。


追加するために編集:「キーは整数です」と言いますが、Stringどこでも使用します。文字列は文字列の前にソートされること"123"に注意してください。キーを数値として扱う場合 (数値順にソートするなど) は、 ではなく, などの数値型を使用する必要があります。(技術的には、内容を調べて整数比較を行うことで、文字列値のキーを比較するaを指定することは可能ですが、それを行いたいとは思いません。)"23""abc""bc"IntegerStringTreeMapComparator<String>

于 2012-09-03T00:56:14.850 に答える
2

JavaDocsから

このクラス (HashMap) は、マップの順序を保証しません。特に、順序が時間の経過とともに一定に保たれることを保証するものではありません

「自然な順序」で並べたい場合は、 SortedMapを使用できます。

Iterator追加された順序でキーを返すようにする場合は、代わりにLinkedHashMapを使用できます

このリンクされたリストは反復順序を定義します。これは通常、キーがマップに挿入された順序 (挿入順序) です。

于 2012-09-03T00:57:02.347 に答える