Queue(队列)
队列是一种常用的集合,实现了先进先出(FIFO:First In First Out)。
和list区别在于,list可以实现任意位置添加删除,而队列只能在尾部添加,首部取出。
java标准库中Queue定义了几个方法:
- int size():获取队列长度;
- boolean add(E)/boolean offer(E):添加元素到队尾;
- E remove()/E poll():获取队首元素并从队列中删除;
- E element()/E peek():获取队首元素但并不从队列中删除。
方法中可以看到存取方法都有两个,是因为其在添加或删除失败时返回值不同,以及其报错方式不同。
LinkedList实现了List和Queue的接口,将其当做list使用list的方法,当成Queue使用队列的方法。
注意:不能讲null存入队列,否则容易出现取值错误,因为在取值时不知道是空队列还是空元素。
PriorityQueue(优先队列)
PriorityQueue与Queue的区别在于,优先队列的出队顺序与元素的优先级有关,对其调用remove和poll方法返回的总是优先级最高的元素。
要是用PriorityQueue需给每个元素定义优先级。
如何定义优先级:放入优先队列中的元素需要实现Comparable接口,该接口在之前TreeSet和TreeMap时使用过。实现该接口还需要覆写该方法的compare()方法。
假如该类并没有实现Comparable接口,PriorityQueue允许我们创建一个新的Comparator来判断两个元素的顺序,前提是该Comparator要实现Comparator接口和compare方法。
Queue<User> q = new