Queue
队列啦!一般不可随机访问队列中的元素。Queue官方文档如下:
PriorityQueue
优先队列,学过数据结构应该就清楚是根据堆排序原理实现的。查看官方文档,PriorityQueue的构造器可以传入Comparator对象,这说明可以自己去定义排序的方法,由于之前在TreeSet部分已经详细说明。此处不在赘述。
import java.util.PriorityQueue;
import java.util.Iterator;
public class Hello{
public static void main(String[] args){
PriorityQueue pq = new PriorityQueue();
pq.add(4);
pq.add(5);
pq.add(2);
System.out.println(pq);
System.out.println("----------------");
while(!pq.isEmpty()){
System.out.println(pq.poll());
}
}
}
Deque和ArrayDeque
双端队列。ArrayDeque和ArrayList的实现都是封装了动态的Object[]数组,可以再分配。ArrayDeque还提供了栈操作方法pop,push,peek,如果需要栈这种结构,推荐使用ArrayDeque,不要使用Stack,因为这个是太古老的东西,性能差。
ArrayDeque当作栈来使用的示例代码:
import java.util.ArrayDeque;
public class Hello{
public static void main(String[] args){
ArrayDeque stack = new ArrayDeque();
stack.push(1);
stack.push(2);
stack.push(3);
while(!stack.isEmpty()){
System.out.println(stack.pop());
}
}
}
ArrayDeque当作队列来使用的示例代码:
import java.util.ArrayDeque;
public class Hello{
public static void main(String[] args){
ArrayDeque queue = new ArrayDeque();
queue.addLast(1);
queue.addLast(2);
queue.addLast(3);
while(!queue.isEmpty()){
System.out.println(queue.poll());
}
}
}
LinkedList
之前学习的ArrayList,ArrayDeque都是基于数组实现的。而LinkedList见名知意,是基于链表实现的,所以各有优势啦,基于数组实现,随机访问比较快啦;基于链表实现,插入删除就比较快啦!学过数据结构的应该都很清楚啦。LinkedList实现了List接口,可以随机访问元素;又实现了Deque接口,可以当作双端队列使用个,所以说既可以作为队列使用,也可以作为栈来使用。示例代码参考ArrayDeque稍微改一下就OK了。
List集合的一点建议:
- 遍历List集合,对于ArrayList,随机访问性能好。对于LinkedList集合,迭代器性能好。
- 如果经常插入、删除元素,LinkedList性能好。由于ArrayList需要经常重新分配内部数组大小,性能差。
- 如果多个线程需要同时访问List集合中更多元素,开发者可以考虑使用Collections将集合包装成线程安全的集合。