利用自定义比较器 Comparator 实现类重新实现上道题
时间: 2023-06-26 21:04:26 浏览: 84
java 自定义类比较器代码
好的,让我们来重新实现上一道题目,利用自定义比较器 Comparator 来实现。以下是代码示例:
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int k = scanner.nextInt();
int[] nums = new int[n];
for (int i = 0; i < n; i++) {
nums[i] = scanner.nextInt();
}
PriorityQueue<Integer> pq = new PriorityQueue<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2.compareTo(o1);
}
});
for (int i = 0; i < n; i++) {
pq.offer(nums[i]);
if (pq.size() > k) {
pq.poll();
}
}
System.out.println(pq.peek());
}
}
```
在这个代码中,我们创建了一个 PriorityQueue 对象,同时传入了一个自定义的比较器 Comparator。这个比较器的 compare 方法会将两个整数进行比较,返回它们的大小关系。这里我们使用 o2.compareTo(o1) 实现降序排序。
接着,我们遍历整个数组,将每个数加入到 PriorityQueue 中,并在队列大小超过 k 时,将队首元素弹出。最后输出队列中的队首元素即为第 k 大的数。
阅读全文