2011-01-06 15 views
1

のキー(ソートのいずれかの種類)マップ(ツリーマップまたはハッシュマップ)ソートする方法マップ

私は問題があると、それはこのように書きのキーをソートする方法。

私は

27527から683の鍵を持っているマップ、
27525から1179、
27525から1571、
27525から1813、
27525から4911を、持っている
27526から1303 、
27526から3641、
27525から3989、
27525から4083、
27525から4670、
27526-4102、
27526から558、
27527から2411、
27527から4342

これは、キーのリストであり、キーのそれぞれの値がリストです。
今、このキーを数字で昇順に並べ替えるにはどうすればいいですか?

ex。私は並べ替えたい:1,2,11,20,31,3,10
私は出力として持っていたい:1,2,3,10,11,20,31
しかし、私が使用するautosort出力は次のようになります:1,10,11,2,20,3,31

数字で昇順にソートするにはどうしたらいいですか?
私を助けてください。これは私の初めてのマップとリストの扱いだから、これ以上考えることはできません

+0

数字の文字列を使用している可能性があります。 – Emil

答えて

0

あなたの鍵を見てあなたは、むしろ整数のように扱うように見えるであろうと、現在の文字列です。ここでは多くの人が示唆しているように、マップオブジェクトをどのように扱うかを再調整する必要があります(正しい方法かもしれません)。より簡単な方法は、私たちをコピーしたキーのリストを使用することです。

キーのリストを出力する方法があります。しかし、好きなように並べ替えます。配列とリストは、実行時環境の組み込みコマンドによって簡単にソートされます。これらの要素を最初にハイフンで分割する必要があるかもしれません。

データ構造に関する書籍をお勧めします。

1

あなたの鍵はストリングです。文字列の自然順序付けは辞書編集的です。 TreeMapのコンストラクタでカスタムコンパレータを指定するか、Integerキーを使用する必要があります。

さらに、Map<Key, List<Value>>をGoogle Guava Multimapとしてよりよく表すことができます(例:SortedSetMultimapを参照)。

は、グァバの例を続ける:

Multimap<Integer, Person> multimap = SortedSetMultimap.create(Ordering.natural(), Ordering.arbitrary()); 
multimap.put(1, x); 
multimap.put(1, y); 
multimap.put(2, z); 
multimap.put(1, a); 

そして

multimap.get(1)は、いくつかの任意の順序で、[X、Y、A]を含むセットを返します。 multimap.keys()は[1、2]のソートされたセットを返します。

0

ソートマップ、たとえばjava.util.TreeMapを使用します。

0

キーワード:SortedMap

SortedMap<Integer, Integer> s = new TreeMap<Integer, Integer>(); 

s.put(1, 1); 
s.put(4, 2); 
s.put(2, 3); 
System.out.println(s); //{1=1, 2=3, 4=2} 

もこのexample

関連する問題