是否存在数据结构,以便我可以向其输入所有对象,然后它将根据出现次数(例如以降序)返回对象。我能想到的只是使用哈希映射。哈希映射的关键是对象,值是对象的出现。每次输入一个对象时,我都会增加相应键的值。但是,这样,如果我想根据事件的降序输出对象,我需要遍历一次哈希映射。有没有更有效的方法在Java中实现它?
答案 0 :(得分:0)
SortedMap可能是您最好的选择。您可以编写自己的比较器,以便按照您希望的方式对其进行排序。
编辑:因为似乎有混淆,这是一个按要求降序排序的例子。
import java.util.*;
public class TestSortedMap {
private static class CountComparator implements Comparator<String> {
Map<String, Integer> map;
public CountComparator(Map<String, Integer> map) {
this.map = map;
}
public int compare(String a, String b) {
if (map.get(a) < map.get(b)) return 1;
else if (map.get(a) > map.get(b)) return -1;
return 0;
}
}
public static void main(String[] args) {
Map<String, Integer> testInput = new HashMap<>();
testInput.put("Hello", 10);
testInput.put("World", 0);
testInput.put("Let's", 40);
testInput.put("Party", 30);
System.out.println("Unordered:");
for (String key: testInput.keySet()) {
System.out.println("Key: " + key + " | Value: " + testInput.get(key));
}
CountComparator countComparator = new CountComparator(testInput);
SortedMap<String, Integer> sortedMap = new TreeMap<>(countComparator);
sortedMap.putAll(testInput);
System.out.println("Ordered:");
for (String key: sortedMap.keySet()) {
System.out.println("Key: " + key + " | Value: " + sortedMap.get(key));
}
}
}
结果集:
Unordered:
Key: Party | Value: 30
Key: Hello | Value: 10
Key: Let's | Value: 40
Key: World | Value: 0
Ordered:
Key: Let's | Value: 40
Key: Party | Value: 30
Key: Hello | Value: 10
Key: World | Value: 0