Queue接口

Queue用于模拟了队列这种数据结构,队列通常是指“先进先出”(FIFO)的容器。队列的头部保存在队列中时间最长的元素,队列的尾部保存在队列中时间最短的元素。新元素插入(offer)到队列的尾部,访问元素(poll)操作会返回队列头部的元素。通常,队列不容许随机访问队列中的元素。

Queue接口中定义了如下几个方法:

void add(Object e);     //将指定元素加入此队列的尾部。

Object element();       //获取队列头部的元素,但是不删除该元素。

boolean offer(Object e); //将指定元素加入此队列的尾部。当使用有容量限制的队列时,此方法通常比add(Object e)方法更好。

Object peek();           //获取队列头部的元素,但是不删除该元素,如果此队列为空,则返回null。

Object poll();                //获取队列头部的元素,并删除该元素,如果此队列为空,则返回null。

Object remove();      //获取队列头部的元素,并删除该元素。

Queue有两个常用的实现类:LinkedList和PriorityQueue,下面分别介绍这两个实现类。

LinkedList

LinkedList类是一个比较奇怪的类,它即是List接口的实现类,这意味着它是一个List集合,可以根据索引来随机访问集合中的元素。除此之外,LinkedList还实现了Deque接口,Deque接口是Queue接口的子接口,它代表一个双向队列,Deque接口里定义了一些可以双向操作队列的方法:

void addFirst(Object e);     //将指定元素插入该双向队列的开头。

void addLast(Object e);  //将指定元素插入该双向队列的末尾。

Iterator descendingIterator();  //返回以该双向队列对应的迭代器,该迭代器将以逆向顺序来迭代队列中的元素。

Object getFirst();      //获取、但不删除双向队列的第一个元素。

Object getLast();             //获取、但不删除双向队列的最后一个元素。

boolean offerFirst(Object e);//将指定元素插入该双向队列的开头

boolean offerLast(Object e);//将指定元素插入该双向队列的结尾

Object peekFirst();             //获取、但不删除双向队列的第一个元素;如果此双端队列为空,则返回null。

Object peekLast();             //获取、但不删除该双向队列的最后一个元素;如果此双端队列为空,则返回null。

Object pollFirst();              //获取、并删除双向队列的第一个元素;如果此双端队列为空,则返回null。

Object pollLast();              //获取、并删除双向队列的最后一个元素,如果此双端队列为空,则返回null。

Object pop();                    //pop出该双向队列所表示的栈中第一个元素。

void push(Object e);          //将一个元素push进该双向队列所表示的栈中。

Object removeFirst();        //获取、并删除该双向队列的第一个元素。

Object removeFirstOccurrence(Object e);   //删除该双向队列的第一次的出现元素e。

removeLast();                      //获取、并删除该双向队列的最后一个元素。

removeLastOccurrence(Object e);    //删除该双向队列的最后一次的出现元素e

从以上方法可以看出,LinkedList不仅可以当成双向队列使用,也可以当成“栈”使用,因为该类还包含了pop(出栈)和push(入栈)两个方法。除此之外,LinkedList实现了List接口,所以还被当成List使用。

*建议:

如果需要遍历List集合元素,对于ArrayList、Vector集合,则应该使用随机访问方法(get)来遍历集合元素,这样性能更好,对于LinkedList集合,则应该采用迭代器(Iterater)来遍历集合元素。

如果需要经常执行插入、删除操作来改变List集合大小,则应该使用LinkedList集合,而不是ArrayList。使用ArrayList、Vector集合将需要经常重新分配内存数组的大小,其时间开销往往是使用LinkedList时时间开销的几十倍,效果很差。

如果有多条线程需要同时访问List集合中的元素,可以考虑使用Vector这个同步实现。

PriorityQueue实现类

PriorityQueue是一个比较标准的队列实现类,之所以说它是比较标准的队列实现,而不是绝对标准的队列实现是因为:PriorityQueue保存队列元素的顺序并不是按加入队列的顺序,而是按队列元素的大小进行重新排序。因此当调用peek方法活着pull方法来取出队列中的元素时,并不是取出最先进入队列的元素,而是取出队列中最小的元素。从这个意义上看,PriorityQueue已经违反了队列的最基本原则:先进先出(FIFO)。下面程序示范了PriorityQueue队列的用法。

public classTest {public static voidmain(String[] args){

PriorityQueue pq = new PriorityQueue();

pq.offer(3);

pq.offer(-6);

pq.offer(9);//打印结果为[-6, 3, 9]

System.out.println(pq);//打印结果为-6

System.out.println(pq.peek());//打印结果为-6

System.out.println(pq.poll());

}

}

PriorityQueue不允许插入null元素,它还需要对队列元素进行排序,队列元素有两种排序方式:自然排序、定制排序; 关于使用自然排序和定制排序与前面讲到的TreeSet集合一样,读者可以查看Java集合(二)这章的内容

java 先进先出 集合_Java中的集合Queue、LinkedList、PriorityQueue(四)相关推荐

  1. java list应用_java中list集合的应用

    java中list集合的应用 1.数组列数据的添加与删除: List list = new LinkedList(); list = new ArrayList(); 产生一个数组列对象并建立双向连表 ...

  2. java map遍历_Java中Map集合的两种遍历方式

    Java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下Java中Map集合的两种遍历方式! 关于遍历Map集合的几 ...

  3. java 中的集合_JAVA中的集合

    JAVA中集合,是java中的基础概念,今天接着跟讲课准备课件的机会,重新整理一下关于JAVA中的集合的概念. 集合的概念 java中的集合类是用来存放对象的 集合相当于一个容器,里面包容着一组对象- ...

  4. java三大集合_java中三大集合框架

    一.List集合 1.List实现的超级父类接口:Collection 存储一组不唯一(允许重复),有序的对象. 2.了解ArrayList类 A):定义的格式:ArrayList 集合名 =  ne ...

  5. java map 实例_java中map集合嵌套形式简单示例

    定义了一个学生类,封装了id和name属性,提供一个全参构造器,并复写toSting方法 class Student{ private String id; private String name; ...

  6. java arraylist优点_Java中各种集合的特点总结

    1:集合: (1) Collection(单列集合) List(有序,可重复) ArrayList 底层数据结构是数组,查询快,增删慢 线程不安全,效率高 Vector 底层数据结构是数组,查询快,增 ...

  7. java iterator 嵌套_Java中的集合嵌套

    import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set;publ ...

  8. java set 空值_java中Set集合可以允许有多个空值吗?

    不可以 ,api上set定义: 一个不包含重复元素的 collection.更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,并且最多包含一个 null 元素. J ...

  9. 第十三章_Java中常用集合大整理(含底层数据结构简单介绍)

    第十三章_Java中常用集合大整理 1.集合和数组的区别 集合 既可以存储基本数据类型还可以存储引用数据类型 定长–>是数组最大的特点,也是最大的缺点 数组 只能存储引用数据类型 长度可变 相同 ...

  10. java中集合的区别_Java中的集合与集合之间的区别

    Java收集框架用于操纵对象的收集.收集框架包含多个包装器类,便利类,用于传统实现的类,例如vector和Hashtable,收集接口等. 集合是Java集合框架中的接口.它分为两部分-Java ut ...

最新文章

  1. std thread
  2. [转]C#异步编程的实现方式(1)——异步委托
  3. WINCE补丁包下载地址
  4. WINCE源代码配置文件
  5. literature review and methodology
  6. 产品经理十八章:产品创新能力(二)
  7. 1 用存储过程实现分页,除了上一页,下一页,第一页,和末页外还要有go按钮,以及go到那里的文本框。另外还要在Lable显示“当前x页,一共y页”。注意验证控件的使用和 链接存储过程的内容。...
  8. tracert路由检测命令使用方法
  9. JPA通用Dao类设计
  10. 欠20万信用卡卡奴自救方法
  11. 2、Python函数详解(0601)
  12. 但愿Fedora 10有Ubuntu Wubi安置遵命
  13. php列表顺序,保存列表的顺序(php / zend / jquery)
  14. 首都师范大学计算机科学与技术考研分数线,2017考研:计算机科学与技术专业考研院校推荐之首都师范...
  15. 第三章 python流程控制
  16. Android 蓝牙AVRCP 专题 (2)----- 耳机端设置绝对音量,手机端收到音量改变Register Notification
  17. 从内存池到连接池 老码农眼中的资源池
  18. 2018仲恺农业计算机大类录取,仲恺农业工程学院2019录取分数线预测
  19. 交互式数据可视化_我如何构建一个交互式仪表板Web应用程序以可视化拳击数据...
  20. 在计算机英语中 memory的中文意思是,Memory是什么意思,memory什么意思中文

热门文章

  1. 17.看板方法---瓶颈和非即时可用资源
  2. 3.从Paxos到Zookeeper分布式一致性原理与实践---Paxos 工程实践
  3. 12.UNIX 环境高级编程--线程控制
  4. 145. PHP header status code
  5. 5. Mac phpstorm 快捷键
  6. 25. Magento 创建新闻模块(5)
  7. 17. jQuery - css() 方法
  8. 《数学之美》—Google AK-47的设计者
  9. QTP11 5 HP UFT 11 5 下载地址
  10. MySQL5.6.10的安装