面试题答案
一键面试优先级排序原理
当PriorityBlockingQueue
中的元素是实现了Comparable
接口的对象时,它会根据对象实现的compareTo
方法来确定自然顺序,进而进行优先级排序。PriorityBlockingQueue
内部使用堆数据结构来维护元素的顺序,每次插入新元素时,会通过堆的调整算法(如上浮操作)将新元素放置到合适的位置以维持堆序,使得堆顶元素始终是优先级最高的元素(根据compareTo
方法定义的顺序)。
代码示例
import java.util.concurrent.PriorityBlockingQueue;
class MyComparableObject implements Comparable<MyComparableObject> {
private int value;
public MyComparableObject(int value) {
this.value = value;
}
@Override
public int compareTo(MyComparableObject other) {
// 按照值从小到大排序,值小的优先级高
return Integer.compare(this.value, other.value);
}
@Override
public String toString() {
return "MyComparableObject{" +
"value=" + value +
'}';
}
}
public class PriorityBlockingQueueExample {
public static void main(String[] args) {
PriorityBlockingQueue<MyComparableObject> queue = new PriorityBlockingQueue<>();
queue.add(new MyComparableObject(3));
queue.add(new MyComparableObject(1));
queue.add(new MyComparableObject(2));
// 按优先级出队
MyComparableObject obj;
while ((obj = queue.poll()) != null) {
System.out.println(obj);
}
}
}
上述代码定义了一个实现Comparable
接口的MyComparableObject
类,在compareTo
方法中定义了按值从小到大的排序规则。在main
方法中,创建PriorityBlockingQueue
并添加几个对象,然后通过poll
方法按优先级出队并打印。