Queue接口用于模拟队列这种数据结构,即先进先出。队列不允许随机访问其中的元素。常用方法如下:
取出元素:
- Object element():获取队列头部元素,不删除,如果队列为空抛异常
- Object peek():获取队列头部元素,不删除,如果队列为空返回null
- Object poll():获取队列头部元素,删除,如果队列为空返回null
添加元素
- void add(Object obj):将元素添加到队列尾部
- boolean offer(Object obj):将元素添加到队列尾部,如果队列有长度限制,建议使用此方法
ProorityQueue类
PriorityQueue为Queue接口的实现类,具有队列的性质。但是该队列会将内部元素进行排序,即有序的队列。
PriorityQueue实现有序的方法和TreeSet相同。方式如下:
- 队列内部元素实现Comparable接口,并重写其中的int compareTo(Object obj)方法,定制排序规则
- 创建PriorityQueue对象时,传入Comparator对象,该对象的int compare(Object obj1,Object obj2)负责排序规则
Deque接口
Deque接口实现Queue接口,它表示双端队列。即允许从两段取出元素和添加元素,常用方法如下:
- xxxFirst()/xxxLast()存在Queue常用方法的两套,例如:boolean offerFirst(Object obj)
Deque接口具有栈的特性,即弹栈和压栈,方法如下:
- Object pop():弹出栈顶元素,该元素会从栈中删除
- void push(Object obj):向栈的添加元素
ArrayDeque类
ArrayDeque是Deque的实现类,是基于数组实现的,内部维护Object[],数组默认长度16。ArrayDeque和ArrayDeque实现机制相同。
因此ArrayDeque不仅具有双端队列(先进先出)的特性;也有栈(后进先出)的特性
LinkedList类
LinkedList实现了List接口,特性之一是可根据索引随机访问集合内元素;同时还实现了Deque接口,可以被当成双端队列和栈使用。内部以链表形式保存元素,随机访问性能较差,插入和删除性能优秀
性能比较
- 数组存储单元连续,随机访问速度较快,ArrayList集合应该使用get遍历元素;LinkedList应该使用迭代器遍历集合
- 如果经常要插入、删除操作,则建议使用LinkedList集合;ArrayList要经常重新分配内部数组大小,性能较差