我想将Comparator重新定义为HashSet的大小,但是我得到了compare方法必须覆盖或实现超类型方法的错误。
如何创建具有Hashset大小比较的TreeMap?
private Map<Integer, HashSet<Integer>> nodes = new TreeMap<>(
new Comparator(){
@Override
public int compare(HashSet<Integer> o1 , HashSet<Integer> o2) {
return (o1.size()).compareTo(o2.size());
//o2.size().compareTo(o1.size());
}
});
答案 0 :(得分:0)
您可以使用Comparator并编写比较代码,根据HashSet大小对值进行排序,如下所示:
import java.util.Comparator;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.TreeMap;
public class Solution {
public static void main(String[] args) {
Map<String, HashSet<Integer>> map = new HashMap<String, HashSet<Integer>>();
HashSet<Integer> aSet = new HashSet<>();
aSet.add(1);
aSet.add(2);
aSet.add(3);
aSet.add(4);
aSet.add(5);
map.put("a", aSet);
HashSet<Integer> bSet = new HashSet<>();
bSet.add(1);
bSet.add(2);
bSet.add(3);
bSet.add(4);
map.put("b", bSet);
HashSet<Integer> cSet = new HashSet<>();
cSet.add(1);
cSet.add(2);
cSet.add(3);
cSet.add(4);
cSet.add(5);
cSet.add(6);
cSet.add(7);
map.put("c", cSet);
System.out.println(map);
Map sortedMap = sortByValue(map);
System.out.println(sortedMap);
}
public static Map sortByValue(Map unsortedMap) {
Map sortedMap = new TreeMap(new ValueComparator(unsortedMap));
sortedMap.putAll(unsortedMap);
return sortedMap;
}
}
class ValueComparator implements Comparator {
Map map;
public ValueComparator(Map map) {
this.map = map;
}
public int compare(Object keyA, Object keyB) {
HashSet<Integer> valueA = (HashSet<Integer>) map.get(keyA);
HashSet<Integer> valueB = (HashSet<Integer>) map.get(keyB);
Integer valASize = valueA.size();
Integer valBSize = valueB.size();
return valASize.compareTo(valBSize);
}
}