使用Java定义一个缓存,然后取出十个重复最多的数据,并且排好序
时间: 2023-05-22 08:07:16 浏览: 104
java使用hashMap缓存保存数据的方法
可以使用HashMap实现一个缓存,将数据存储在其中,并记录每个数据的重复次数。接着,可以使用PriorityQueue对HashMap中的数据进行排序,取出前十个重复次数最多的数据,即为所求。以下是Java代码的示例:
import java.util.*;
public class CacheExample {
public static void main(String[] args) {
Map<String, Integer> cache = new HashMap<String, Integer>();
// 将数据存储在缓存中,并记录重复次数
String[] data = {"a", "b", "c", "a", "d", "e", "a", "b", "a", "c"};
for (String item : data) {
if (cache.containsKey(item)) {
cache.put(item, cache.get(item) + 1);
} else {
cache.put(item, 1);
}
}
// 使用PriorityQueue对数据进行排序,取出前十个重复次数最多的数据
PriorityQueue<String> pq = new PriorityQueue<String>(10, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return cache.get(s2) - cache.get(s1); // 按重复次数从大到小排序
}
});
for (String key : cache.keySet()) {
pq.offer(key);
}
for (int i = 0; i < 10 && !pq.isEmpty(); i++) {
System.out.println(pq.poll() + ": " + cache.get(pq.peek()) + "次");
}
}
}
在这个示例中,我们定义了一个缓存Map,然后将数据存储在其中,并记录每个数据的重复次数。其中,put方法用于存储数据,containsKey方法用于检查数据是否已经存在,get方法用于获取数据的重复次数。
接着,我们使用PriorityQueue对缓存中的数据进行排序,并使用poll方法取出前十个重复次数最多的数据。其中,PriorityQueue的初始化中需要指定容量和比较器。比较器用于确定PriorityQueue中元素的排序规则,这里我们定义了一个按重复次数从大到小排序的比较器。
最后,我们遍历PriorityQueue,使用peek方法获取最大元素,并输出元素的重复次数。注意,这里输出的重复次数是使用get方法获取的,而不是PriorityQueue中元素的次数。这是因为PriorityQueue中可以有重复元素,而我们需要统计的是不同元素的重复次数。
阅读全文