一、类继承关系
二、接口说明
1、Queue接口
Queue接口继承自Collection接口,表示一个先进先出队列,所有的新元素都插入到队尾,从队首获取元素。Queue接口有6个核心方法,两两成对,add和offer表示添加元素到队尾,remove和poll是移除并返回队首的元素,element和peek方法时返回队首的元素但不移除,前者操作失败时如队列已满添加失败或者队列为空移除获取队首元素失败会抛出异常,后者不会,会返回null或者false。正是因为Queue接口返回null表示队列为空所以不允许插入null的元素,即使实现类支持插入null元素。增加的方法如下:
测试用例如下:
@Test
public void test() throws Exception {
Queue<String> queue=new LinkedList<>();
queue.add("test");
queue.add("test2");
queue.add("test3");
queue.add("test4");
queue.add("test5");
//offer添加失败,比如固定长度队列下队列已满,会抛出异常
queue.offer("test6");
queue.offer("test7");
queue.offer("test8");
queue.offer("test9");
queue.offer("test10");
int size=queue.size();
System.out.println(size);
for(int i=0;i<size+1;i++){
//element()和peek()方法都是返回队列头部的元素,队列为空时peek返回null,element()会抛出异常NoSuchElementException
System.out.println("peek:"+queue.peek());
// System.out.println("element:"+queue.element());
//poll()和remove()都是移除并返回头部的元素,队列为空时poll()返回null,remove()抛出异常NoSuchElementException
// System.out.println("poll:"+queue.poll());
System.out.println("remove:"+queue.remove());
}
}
2、Deque接口
Deque接口表示一个双端队列,即同时支持在队列的两端执行元素插入或者删除操作,可以当做是先进先出FIFO队列Queue使用,也可以当做后进先出LIFO队列Stack使用。同Queue,操作队列两端元素的方法都有两种形式,一种是操作失败抛出异常,一种是返回null或者false,且都不支持插入null元素。其增加的方法如下:
各方法的关系如下:
测试用例如下:
@Test
public void test2() throws Exception {
Deque<String> deque=new LinkedList<>();
//add()同addLast()是等价的
deque.add("test");
deque.add("test2");
deque.add("test3");
deque.addLast("test4");
deque.addLast("test5");
//offer()和offerLast()是等价的
deque.offer("test6");
deque.offer("test7");
deque.offerLast("test8");
deque.offerLast("test9");
deque.offerLast("test10");
int size=deque.size();
System.out.println(size);
for(int i=0;i<size+1;i++){
//peek()和peekFirst()是等价的
System.out.println("peek:"+deque.peek());
System.out.println("peekFirst:"+deque.peekFirst());
//element()和getFirst()是等价的
System.out.println("element:"+deque.element());
System.out.println("getFirst:"+deque.getFirst());
//poll()和pollFirst()是等价的
// System.out.println("poll:"+queue.poll());
System.out.println("poll:"+deque.pollFirst());
//remove和removeFirst()是等价的
// System.out.println("remove:"+deque.remove());
// System.out.println("removeFirst:"+deque.removeFirst());
}
}
@Test
public void test3() throws Exception {
Deque<String> deque=new LinkedList<>();
//往尾部插入
deque.add("test");
deque.add("test2");
deque.add("test3");
deque.addLast("test4&#