Queue
Java中Queue的类图:
1.Queue介绍
Queue,java中模拟队列的一种数据结构,先进先出(FIFO),不支持随机访问数据,通过offer()方法增加数据到队列尾部,poll()获取队列头部元素,可以将Queue看成一个通道,最先走进的通道的也是最先走出通道的,最后走进去的,在通道里面呆的时间最久。
2.Queue主要实现
Queue中的主要实现有PriorityQueue和LinkedList. PriorityQueue目前还没有接触过,等到用到的时候再来补充,我们这里主要介绍下LinkedList,这是一个功能强大的集合。
LinkedList同时实现list和Deque接口,所以它也同时具有了list和queue的特点,它既有索引,是一个list,同时也是一个双向队列,所有它的操作方式也比较多样,list和queue的都可以用,我们用代码看下具体用法:
package com.ljw.ColleactionAndMap;
import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
import java.util.Queue;
/**
* Created by liujiawei on 2018/6/29.
*/
public class TestLinkedList {
public static void main(String[] args) {
List a = new LinkedList();
Queue q = new LinkedList();
LinkedList linkedList = new LinkedList();
linkedList.add(0,"jack");
linkedList.add(1,"tom");
System.out.println(linkedList);
//双向链表 直接操作头尾元素
linkedList.addFirst("jerry");
System.out.println(linkedList);
linkedList.addLast("pony");
System.out.println(linkedList);
System.out.println("栈顶元素" + linkedList.peek());
System.out.println("栈顶元素" + linkedList.peekFirst());
System.out.println("栈底元素" + linkedList.peekLast());
linkedList.offer("tony");
System.out.println(linkedList.pop());
ListIterator listIterator = linkedList.listIterator();
while(listIterator.hasNext()){
System.out.println(listIterator.next());
}
}
}
运行结果:
queue是不支持随机访问数据的,但是linkedlist因为可以当成list使用,所以他支持随机访问,也可以使用队列中操作头尾的方法,如peekFirst(),offer(),poll()等,同时还可以使用栈的一些方法,如pop()等,是一个功能强大的集合类。
Linkedlist优缺点:
优点:(1)内部使用链表实现,执行插入、删除操作很快;
(2)功能强大,list,queue和stack的方法都可以使用;
缺点:
(1)随机访问数据方面不如内部是用数组实现的arraylist和vector。
3.ArrayList,Vector,LinkedList比较
(1)如果需要遍历集合,ArrayList和Vector通过随机访问的方式比较好,LinkedList通过迭代器的方式比较好;(2)需要经常执行插入、删除操作时,使用LinkedList比较好,因为他用链表实现,ArrayList和Vector内部会扩容动态分配大小,耗费时间;
(3)需要线程安全,考虑使用Vector。