2016-04-21 5 views
0

以下のコードを使用して、値でハッシュマップをソートします。しかし、1つの値に対して1つのエントリしか保持せず、重複した値を持つ別のエントリを削除するため、結果は混乱しているようです。 ここComparatorコードです:なぜ、重複した値を持つ異なるキーが、ハッシュマップをツリーマップに転送するときに消えますか

class ValueComparator implements Comparator { 
    Map map; 

    public ValueComparator(Map map) { 
     this.map = map; 
    } 

    public int compare(Object keyA, Object keyB) { 
     Comparable valueA = (Comparable) map.get(keyA); 
     Comparable valueB = (Comparable) map.get(keyB); 
     return valueB.compareTo(valueA); 
    } 

そして、ここで私はそれを使用する方法です:完璧な理にかなっている

TreeMap sortedMap=new TreeMap(new ValueComparator(allCandidateMap)); 
     sortedMap.putAll(allCandidateMap); 

答えて

1

。 2つのキーがallCandidateMapの等しい値にマップされている場合は、compare0を返すため、等しいとみなす必要があると宣言しました。

これは、コンパレータがキーと値の役割をほぼ逆転したことです。他の操作をしようとすると、マップの値がキーのように動作することがよくあります。 getcontainsKeyなどのメソッドは、キーではなく値を参照しているかのように動作します(ただし、getは渡された値を返すため、値も値のままです)。コンパレータはTreeMapの動作を定義しており、非常に奇妙な動作を要求しています。

関連する問題