Deep Dive: PriorityQueue需要如何比较两个item(自己定义的/原本就有的)
Summary
接口名
方法名
Method 1. Implementation Comparable
Class 1: 原本就存在于Java中的的Object实现Comparable Interface
// Some code
interface Comparable<E> {
int compareTo(E ele);
}
class Integer implements Comparable<Integer> {
private int value;
public Integer(int value){
this.value = value;
}
@Override
public int compareTo(Integer another) {
if (this.value == another.value) {
return 0;
}
return this.value < another.value? -1: 1;
}
}
// 例子
public static void main(String[] args){
Integer one = new Integer(1);
Integer two = new Integer(2);
System.out.println(one.compareTo(two));
}Class 2: 我们自己定义的Class Implement Comparable
Method 2.实现Comparator Interface Override compare(E e1, E e2) Method in Comparator interface
一些问题
Question 1 有咩有可能一个类已经实现了Comarable, 那这个时候我能写这个Class的Comaprator吗?
Question 2 如何让PriorityQueue 不按照Comparable的compare To来比较,而是用我们定义的Comparator的compare来比较呢?
Question 3: 那这样,叫minHeap还合适吗?那怎么创建maxHeap
Method 1:可以自己建立一个Comparator 让比较大的元素优先级高,传进PriortyQueue
Method 2:用Utility Method

Question 4: 怎么有的PriorityQueue Constructor建立的时候要传数字(16),有的可以 传reverseOrder(),到底有多少种Constructor
Requirement
Constructors
Question 5: 我记得有个方法就是把一个Collection变成一个Heap的方法叫做Heapify并且是O(n) 的,但是为啥在java doc里找不到

Question 6: 还是看不懂?


Question 6b: 五种version出现
Basic Version 1: 本来应该这样:亚古兽
Basic Version 1.5: 不想完整写一个Class: Static Nest Class
进化Version 2: 你别那么麻烦,如果你只是用一给,用这一次就是为了给我PriortyQueue里面传进来一个,那么没有必要定一个class,可以定一个没有名字,匿名内部类。重点在于告诉我们里面那个comapre方法长什么样子就可以了
进化 Version 3: Lambda Expressions
进化 Version 4

Last updated