7

重複の可能性:
Java の値で Map<Key, Value> をソートする方法は?

私のプロジェクトでは、このような HashMap を取得しました

HashMap 度 = new HashMap();

私が持っているとします:

degree.put("a",5);
degree.put("b",2);
degree.put("c",4);
degree.put("d",2);
degree.put("e",3);
degree.put("f",5);

ここで、指定された整数値に従ってこのリストをソートする必要があります

ソートされた HashMap は次のようになります。

{a=5、f=5、c=4、e=4、b=4、d=2}

どうすればこれを行うことができますか?

4

4 に答える 4

11

AHashMap順序付けられていないコレクションです。ソート順はありません。でさえ、TreeMap値ではなくキーでソートします。

値の並べ替え順で並べ替えられたリストを作成する場合は、 などの適切なオブジェクトを作成し、すべてのエントリをArrayList<Map.Entry<String,Integer>>反復処理して挿入し、照合関数で呼び出す必要があります。HashMapCollections.sort

于 2012-09-01T16:50:00.893 に答える
4

ソートされたマップが必要な場合、HashMapは最善のアプローチではありません。

並べ替えられているので、見てみることをお勧めしますTreeMap。この回答のように、キーの代わりに値を比較するようにコンパレータを設定できます。

https://stackoverflow.com/a/1283722/975959

于 2012-09-01T16:52:36.650 に答える
1
ArrayList<Integer> sortedHashMap=new ArrayList<Integer>();

for("your Object" m : degree.values())
{
      sortedHashMap.add(m);
}

collections.sort(sortedHashMap);

したがって、hashMap をソート済み hashMap として出力できます。

于 2012-09-01T17:03:24.347 に答える
0

挿入ソートを実行して、元のハッシュマップから新しいハッシュマップを作成できます(x2 のメモリを使用し、非常に非効率的です)。したがって、ハッシュマップの .get() および .set() メソッドをほぼ n*n (最悪の場合) 回使用する必要があります。n は要素の数です。

于 2012-09-01T16:56:36.337 に答える