2016-11-29 20 views
0

HashMapを設定し、TreeMapに渡してKeyの値で自然順に並べ替えるためのコードです。HashMapを使用し、TreeMapを降順キー値で使用して並べ替え

Map<Integer, String[]> hashMap = new HashMap<Integer, String[]>(); 
    hashMap.put(3, new String[]{"1","2"}); 
    hashMap.put(2, new String[]{"1","2"}); 
    hashMap.put(4, new String[]{"1","2"}); 
    hashMap.put(1, new String[]{"1","2"}); 

    System.out.println(hashMap); 

    Map<Integer, String[]> treeMap = new TreeMap<Integer, String[]>(hashMap); 

    System.out.println(hashMap); // Natural Order, Ascending 

今私の問題は、どのように私は私のtreeMapDescendingで順番を並べ替えることができ、ありますか?私はKeyComparatorという名前のComparatorクラスを準備しています。このクラスは降順に並べ替えられます(Key)。ここでは以下の私のコードは次のとおりです。

public class KeyComparator implements Comparator<Integer> { 
    @Override 
    public int compare(Integer o1, Integer o2) { 
     if (o1 < o2) { 
      return 1; 
     } else if (o1 > o2) { 
      return -1; 
     } else { 
      return 0; 
     } 
    } 
} 

TreeMapは、たとえばTreeMap(new KeyComparator(),hashMap)のためのようには2パラメータ化コンストラクタを持っていません。 KeyComparatorクラスを同時に使用してhashMaptreeMapに読み込むにはどうすればいいですか?

+1

を微調整する必要があります'new TreeMap (hashMap).descendingMap()' –

答えて

2

以下のようにして、Comparatorでツリーマップを作成し、次にputAllメソッドを使用してハッシュマップを渡します。

Map<Integer, String[]> treeMap = new TreeMap<Integer, String[]>(new Comparator<Integer>() { 
    @Override 
    public int compare(Integer o1, Integer o2) { 
     if (o1 < o2) { 
      return 1; 
     } else if (o1 > o2) { 
      return -1; 
     } else { 
      return 0; 
     } 
    } 
}); 
treeMap.putAll(hashMap); 

System.out.println(treeMap); // Descending 

注: -上記の例では、私はComparatorの匿名の実装に合格しています。コンストラクタにはいつでもKeyComparatorを渡すことができます。

+0

'treeMap.putAll'が本当に役立ちます。私が初めて使ったのはこれです。ありがとう。 – msagala25

1

これはあなたの質問に答えることはできませんが、単純に配列を使って並べ替えるだけではどうですか?

System.out.println("map: " + hashMap); 
List<Integer> keys = new ArrayList<Integer>(hashMap.keySet()); 
System.out.println("unsorted keys: " + keys); 
Collections.sort(keys); 
System.out.println("sorted (asc) keys: " + keys); 
Collections.reverse(keys); 
System.out.println("sorted (desc) keys: " + keys); 
+0

申し訳ありませんが、私はTreeMapの方法でそれを必要としています。 – msagala25

1

すでに述べたように、あなたはTreeMap(Comparator<? super K> comparator)は、すべてのエントリを追加するputAll(Map<? extends K,? extends V> m)を使用しているキーコンパレータでコンストラクタを使用して最初にする必要があります。

あなたはJavaの8として次の自然順序付けの逆を取得するためにComparator.reverseOrder()を使用するだけで、それを再実装する必要はありません使用している場合:

Map<Integer, String[]> treeMap = new TreeMap<>(Comparator.reverseOrder()); 
treeMap.putAll(hashMap); 
System.out.println(treeMap); 
+1

** Java 7 **を使用しています。 'treeMap.putAll'は私が必要とするすべてのものです。** Java 8 **で概要を説明してくれてありがとうございます。 – msagala25

0

TreeMapのは、このための素晴らしい方法があります。あなたは

TreeMap<Integer, String[]> map = new TreeMap<>(hashMap); 
NavigleMap<Integer, String[]> reversedMap = map.descendingMap(); 
関連する問題