我有以下HashMap
:
HashMap<String, Integer> counts = new HashMap<String, Integer>();
根据值来订购它的最简单方法是什么?
答案 0 :(得分:8)
您无法按值排序Map
,尤其是HashMap
,而这些值根本无法排序。
相反,您可以对条目进行排序:
List<Map.Entry<String, Integer>> entries = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());
Collections.sort(entries, new Comparator<Map.Entry<String, Integer>>() {
public int compare(
Map.Entry<String, Integer> entry1, Map.Entry<String, Integer> entry2) {
return entry1.getValue().compareTo(entry2.getValue());
}
});
将按计数的升序对条目进行排序。
答案 1 :(得分:3)
您可以使用Set
从地图中获取一组条目(Map.Entry
map.entrySet()
)。只需迭代它们,然后按getValue()
检查值。
答案 2 :(得分:1)
TreeMap可以按照Comparator定义的顺序保留其条目。
counts
地图中的所有条目放入比较器。最后,我们将在地图中get the first key,这应该是最常见的单词(或者至少有一个单词,如果多个单词具有相同的计数)。
public class Testing {
public static void main(String[] args) {
HashMap<String,Double> counts = new HashMap<String,Integer>();
// Sample word counts
counts.put("the", 100);
counts.put("pineapple",5);
counts.put("a", 50);
// Step 1: Create a Comparator that order by value with greatest value first
MostCommonValueFirst mostCommonValueFirst = new MostCommonValueFirst(counts);
// Step 2: Build a TreeMap that uses that Comparator
TreeMap<String,Double> sortedMap = new TreeMap<String,Integer (mostCommonValueFirst);
// Step 3: Populate TreeMap with values from the counts map
sortedMap.putAll(counts);
// Step 4: The first key in the map is the most commonly used word
System.out.println("Most common word: " + sortedMap.firstKey());
}
}
private class MostCommonValueFirst implements Comparator<String> {
Map<String, Integer> base;
public MostCommonValueFirst(Map<String, Integer> base) {
this.base = base;
}
// Note: this comparator imposes orderings that are inconsistent with equals.
public int compare(String a, String b) {
if (base.get(a) >= base.get(b)) {
return 1;
} else {
return -1;
} // returning 0 would merge keys
}
}
答案 3 :(得分:0)
解决方法,如果你想按顺序打印它们(不存储)。
创建一个新地图(tempMap
)并将您的值作为键和键作为值。要使密钥唯一,请在每个密钥中添加一些唯一值,例如key1 = value1 + @ 0。
将值列表map.values()
列为myVlues
将myVlues
列表排序为Collections.sort(myVlues)
现在迭代myVlues
,从key
获取相应的tempMap
,恢复密钥,例如key.substring(0,key.length-2)并打印键和值对。
希望这有帮助。