Java内置的优先队列PriorityQueue
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Java内置的优先队列PriorityQueue,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1612字,纯文字阅读大概需要3分钟。
内容图文
![Java内置的优先队列PriorityQueue](/upload/InfoBanner/zyjiaocheng/635/714224d278c74b75bceb1f0104fc31c2.jpg)
PriorityQueue是Java内置的优先队列,每次取出来的元素是最小的。PriorityQueue可以做到自动扩容。PriorityQueue中的对象必须是可比较的。
例如,最简单的情况,在PriorityQueue中保存整数:
PriorityQueue<Integer> priInt = new PriorityQueue<>();
然后在其中依次添加五个整数(注意,在PriorityQueue中添加对象,可以调用add,也可以调用offer。)
priInt.add(1);
priInt.add(3);
priInt.add(4);
priInt.add(5);
priInt.add(2);
然后通过poll函数所取出来的值就是从小到大排列好的1,2,3,4,5
int n = priInt.poll(); // n is 1 n = priInt.poll(); // n is 2 n = priInt.poll(); // n is 3 n = priInt.poll(); // n is 4 n = priInt.poll(); // n is 5
PriorityQueue中还可以放置自定义对象。由于PriorityQueue中的对象必须是可比较的,所以必须为自定义对象定义比较规则。
例如,对于自定义类
class MyClass { int n1; int n2; public MyClass(int n1, int n2) { this.n1 = n1; this.n2 = n2; } }
具体做法有3种
1、MyClass实现接口Comparable,在override的函数compareTo中定义比较规则
static class MyClass implements Comparable<MyClass> { int n1; int n2; public MyClass(int n1, int n2) { this.n1 = n1; this.n2 = n2; } @Override public int compareTo(MyClass o) { return this.n2 - o.n2; } }
然后,PriorityQueue上就不用做任何额外的操作了,直接定义即可
PriorityQueue<MyClass> priMyClass = new PriorityQueue<>();
2、在PriorityQueue的参数中,通过Comparator接口定义比较规则
PriorityQueue<MyClass> priMyClass = new PriorityQueue<>( new Comparator<MyClass>() { public int compare(MyClass o1, MyClass o2) { return o1.n2 - o2.n2; } } );
3、在PriorityQueue的参数中,通过lambda表达式定义比较规则。写起来最省事
PriorityQueue<MyClass> priMyClass = new PriorityQueue<>((MyClass o1, MyClass o2) -> o1.n2 - o2.n2);
内容总结
以上是互联网集市为您收集整理的Java内置的优先队列PriorityQueue全部内容,希望文章能够帮你解决Java内置的优先队列PriorityQueue所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。