aとaを<Integer,Double>
使用してタイプのハッシュマップを並べ替えようとしていますが、sの絶対値で並べ替えたいのですが、符号値も保持したいのです(したがって、unsignedとして保存しません)。TreeMap
SortedMap
Double
Double
以下は私が使用しているコードですが、おそらくhashcode()
これを修正する方法を誰かが指摘できるのを使用しているため、期待する値が得られません。
Map<Integer,Double> termWeights = new HashMap<Integer,Double>();
SortedMap sortedData = new TreeMap(new ValueComparer(termWeights));
System.out.println(termWeights);
sortedData.putAll(termWeights);
System.out.println(sortedData);
class ValueComparer implements Comparator {
private Map _data = null;
public ValueComparer(Map data) {
super();
_data = data;
}
public int compare(Object o1, Object o2) {
Double e1 = Math.abs((Double) _data.get(o1));
Double e2 = Math.abs((Double) _data.get(o2));
int compare = e2.compareTo(e1);
if (compare == 0) {
Integer a = o1.hashCode();
Integer b = o2.hashCode();
return b.compareTo(a);
}
return compare;
}
}
ありがとう