赞
踩
Queue普通队列:队列元素按照先进先出规则,示例如下
入队顺序:a,b,c,d
出队顺序:a,b,c,d
PriorityQueue优先队列:为每个入队元素设定一个优先级,按优先级顺序出队,示例如下,括号内为优先级
入队顺序:a(3),b(1),c(2)
出队顺序:b(1),c(2),a(3)
java中优先队列的实现类是PriorityQueue,默认情况下,优先级由对象的自然顺序决定。队列构建时提供的比较器可以覆盖默认优先级。关于Comparable和Comparator的使用可以参考 Java中Comparable接口与Comparator接口的详解与使用
1.Comparable接口:元素实现Camparable接口,重写接口中的compareTo函数,按照函数中的规则进行比较
2.Comparator接口:按照外部比较器的规则来决定元素优先级
PriorityQueue() :使用默认的容量11创建一个优先队列,元素的顺序规则是自然顺序
PriorityQueue(int initialCapacity): 使用自定义容量initialCapacity创建一个优先队列,元素的顺序规则是自然顺序
initialCapacity(Comparator<?super E> comparator) : 使用默认的容量11创建一个优先队列,元素的顺序规则是comparator
定义Animal类实现Comparable接口,compareTo方法中自定义优先级规则为按照age从小到大顺序
public class Animal implements Comparable<Animal>{ String name; int age; public Animal() { } public Animal(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "Animal{name = " + name + ", age = " + age + "}"; } @Override public int compareTo(Animal o) { return this.age - o.age; //优先级按照age从小到大 } }
public class Test {
public static void main(String[] args) {
PriorityQueue<Animal> pq = new PriorityQueue<>();
pq.add(new Animal("毛毛",2));
pq.add(new Animal("豆子",5));
pq.add(new Animal("图图",1));
System.out.println(pq.poll());
System.out.println(pq.poll());
System.out.println(pq.poll());
}
}
运行结果可知,队列中的元素按age从小到大顺序出队,与入队顺序无关
Animal{name = 图图, age = 1}
Animal{name = 毛毛, age = 2}
Animal{name = 豆子, age = 5}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。