任务调度,LRU,和数组相关的俩个工具:Arrays/Collection
队列:在队尾插入元素,在队头删除
俩端队列:可以在队尾和对头同时进行插入或删除
队列的特点:对元素操作只可以在队头或队尾进行
队列的俩个接口 Queue、Deque(双端队列)
队列的实现类:
1,LinkedList具有队列和俩端队列的功能,内部使用链表来实现的
2,ArrayDeque 具有队列、俩端队列的功能,内部使用循环数组实现
3,PriorityQueue优先级队列,它实现结构可以快速把所有元素中最小的元素单独放出来,栈的数据结构 应用场景:任务调度
队列
-
增
add(e)/offer(e)
在队列未满的情况下,添加元素到队列的尾部。
如果队列已满,add抛异常IllegalStateException
offer的话会返回false -
删
remove/poll
如果队列不为空,删除并返回队头的元素
如果队列为空:remove 抛异常 NOSuchElementException
poll返回空
如果使用remove来删除队尾元素,remove前需要判断是否为空
size()==0/isEmpty()
使用poll来获取队尾元素时,获取到结果后,先判断结果是否为空
//Queue接口的方法
Queue<String> queue =new LinkedList<>();
//增删查改
//add(e)/offer(e)
//在队列未满的情况下,添加元素到队列的尾部。
//如果队列已满,add抛异常IllegalStateException
//offer的话会返回false
//增
queue.add("str1");
queue.add("str3");
queue.offer("str2");
queue.offer("str4");
//删
//remove/poll
//如果队列不为空,删除并返回队头的元素
//如果队列为空:remove 抛异常 NOSuchElementException
// poll返回空
//如果使用remove来删除队尾元素,remove前需要判断是否为空
//size()==0/isEmpty()
//使用poll来获取队尾元素时,获取到结果后,先判断结果是否为空
System.out.println("remove:"+queue.remove());
System.out.println(queue);
System.out.println("remove:"+queue.remove());
System.out.println(queue);
System.out.println("remove:"+queue.remove());
System.out.println(queue);
System.out.println("remove:"+queue.remove());
System.out.println(queue.isEmpty());
System.out.println(queue.size());
System.out.println("poll:"+queue.poll());
System.out.println("remove:"+queue.remove());
remove:str1
[str3, str2, str4]
remove:str3
[str2, str4]
remove:str2
[str4]
remove:str4
true
0
poll:null
Exception in thread "main" java.util.NoSuchElementException
at java.util.LinkedList.removeFirst(LinkedList.java:270)
at java.util.LinkedList.remove(LinkedList.java:685)
at com.southwind.queueTest.QueueTest.main(QueueTest.java:38)
Process finished with exit code 1
- 查
仅查看队头元素是什么,不删除
element//peek
如果队列不为