更好的使用Java集合(三)
2016-03-14 00:00
489 查看
摘要: 如何更好的使用Java集合,对Java集合队列、双端队列和优先级队列进行了介绍,选择更合适的应用场景使用正确的集合。
队列、双端队列和优先级队列
队列可以有效地在尾部添加一个元素,在头部删除一个元素。有两个端头的队列叫双端队列。
可以有效地在头部和尾部添加或删除元素,但不支持在队列中间添加元素。JavaSE6中引入了Deque接口,并由ArrayDeque和LinkedList类实现。
优 先级队列(priority queue)中的元素可以按照任意的顺序插入,但却总是按照排序的顺序进行检索。无论何时调用remove方法,总会获得当前优先级队列中最小的元素。优 先级队列并没有对所有的元素进行排序,而是使用了堆(heap)。堆是一个可以自我调整的二叉树,可以让最小的元素移动到根,而不必花费时间对元素进行排 序。
结果返回了task2,10;task1,20;task3,30。通过Task的priority属性进行了排序。
队列、双端队列和优先级队列
队列可以有效地在尾部添加一个元素,在头部删除一个元素。有两个端头的队列叫双端队列。
可以有效地在头部和尾部添加或删除元素,但不支持在队列中间添加元素。JavaSE6中引入了Deque接口,并由ArrayDeque和LinkedList类实现。
add(E element);offer(E element); addFirst(E element);offerFirst(E element); addLast(E element);offerLast(E element); | 将给定元素添加到双端队列的头部或尾部。如果队列满了,add*(E element)方法将抛出IllegalStateException异常,而offer*(E element)方法返回false。 |
remove();poll(); removeFirst();pollFirst(); removeLast();pollLast(); | 如果队列不为空,删除并返回队列头部或尾部的元素。如果队列为空,remove*()方法将抛出NoSuchElementException异常,而poll*()方法返回null。 |
element();peek(); getFirst();peekFirst(); getLast();peekLast(); | 如果队列不为空,返回队列头部或尾部的元素。如果队列为空,element()方法和get*()方法将抛出NoSuchElementException异常,而peek*()方法返回null。 |
public class Task { public Task() { } public Task(String name, int priority) { super(); this.name = name; this.priority = priority; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getPriority() { return priority; } public void setPriority(int priority) {   3ff0 ; this.priority = priority; } private String name; private int priority; }
@Test public void PriorityQueueTest() { PriorityQueue<Task> pq = new PriorityQueue<Task>( new Comparator<Task>() { public int compare(Task t1, Task t2) { return t1.getPriority() - t2.getPriority(); } }); pq.add(new Task("task1", 20)); pq.add(new Task("task2", 10)); pq.add(new Task("task3", 30)); for (Task t : pq) System.out.println(t.getName() + "," + t.getPriority()); }
结果返回了task2,10;task1,20;task3,30。通过Task的priority属性进行了排序。
相关文章推荐
- 简洁的Java四舍五入保留2位小数!!不需要导入其他包
- Java compiler level does not match the version of the installed Java project facet.
- spring IOC DI简单理解
- 深入理解java内存模型
- Java-J2SE基础复习
- SpringMVC 拦截 controller并解析接口平台
- SpringMVC 拦截web端登录
- SpringMVC 拦截class,method注解可替换方法
- java后端书架
- Eclipse+Maven快速生成Web项目,解决部署时Maven lib依赖问题
- java中Scanner的用法。
- java第二周学习总结
- eclipse fat jar 打包插件
- Java 中的语法糖 (Syntactic Sugar)
- Java heap space解决方法
- springMVC工作原理
- Java day03 进制转换(3)索引表 数组实现 十进制向各进制转换
- Java day03 进制转换(2)索引表 数组实现
- JAVA day03 数组的应用,查找,求最值与基本排序方式
- Java day03 数组的定义和初始化