Java的Queue集合
2016-07-14 22:06
239 查看
Queue用于模拟队列这种数据结构,队列通常是指“先进先出”FIFO的容器,队列的头部保存在队列中存放时间最长的元素,队列的尾部保存在队列中存放时间最短的元素。Queue接口中定义了如下几个方法void add(Object e)将指定的元素加入到此队列的尾部;Object element()获取队列头部的元素,但是不删除该元素。boolean offer(Object e):将指定的元素加入到此队列的尾部。Object peek()获取队列的头部元素,但不删除该元素,如果队列为空返回null。Object poll()获取队列的头部元素,并删除该元素。如果队列为空返回null。Object remove():获取队列头部的元素,并删除该元素。Queue接口有一个priorityQueue实现类,除此之外Queue还有一个Deque的接口,Deque代表一个“双端队列”,双端队列可以同时从两端来添加、删除元素,因此Deque的实现类即可当成队列使用也可以当成栈使用。
1.PriorityQueue是一个比较标准的队列实现类,PriorityQueue保存队列元素的顺序并不是按加入的队列的顺序,而是按照队列元素大小进行重新排列。因此当代调用peek()方法或者poll()方法取出队列的元素时,并不是取出最先进入队列的元素,而是取出队列中最小的元素。PriorityQueue不允许插入null元素,PriorityQueue的元素有两种排序方式,一种自然排序(必须实现Comparable接口)另外一种定制排序(要传入一个Comparator对象)
2.Deque接口是Queue接口的子接口,它代表这一个双端的队列,允许通过这些方法从两端来操作元素,void addFrist(Object e)将指定元素插入该双端队列的开头;void addLast(Object e)将指定的元素插入到双端队列的末尾;Iterator descendingIterator():返回该队列对应的迭代器,该迭代器将逆向顺序来迭代队列的元素。Object getFrist()获取但不能删除双端队列的的一个元素,Object getLast()获取但不删除双端元素的末尾队列。Object peekFrist()获取但不删除双端元素的第一个也元素。Object poolFrist()获取并删除双端队列的第一个元素。boolean offerFrist(Object e)将指定的元素插入到双端队列的开头。Object pop():将一个元素push进该双端队列所表示的栈定顶。void push(Object e)将一个元素push进该双端队列所表示的栈的栈顶。Object removeFrist()获取并删除该双端队列的第一个元素。Object removeFristOccurrence(Object o)删除该双端队列的第一次出现的元素o。Deque接口提供了一个典型的实现类:ArrayDeque,它是基于数组实现的双端队列,创建Deque时同样可指定一个numElement参数指定数组的长度,Deque底层的数组的长度为16,它底层也是一个动态的可重分配的Object[] 数组来存储集合元素。ArrayDeque即可用做栈也可用作队列来使用。
3.LinkedList类是List接口的实现类,这意味这可以根据索引来随机访问数组元素,而它又实现了Deque接口,所以他也可以当做双端队列来使用,因此既可以当成栈也可以当成队列来使用。LinkedList作为List集合、双端队列、栈用法,是一个功能非常强大的集合类。但LinkedList与ArrayList、ArrayDeque的实现机制完全不同,ArrayList、ArrayDeque内部以数组的形式保存集合,随机访问元素性能较好,而LinkedList内部以链表的形式保存数据,随机访问性能较差,但插入、删除元素性能较好,Vertor也是数组子形式存储但是他线程安全所以性能都不好。
1.PriorityQueue是一个比较标准的队列实现类,PriorityQueue保存队列元素的顺序并不是按加入的队列的顺序,而是按照队列元素大小进行重新排列。因此当代调用peek()方法或者poll()方法取出队列的元素时,并不是取出最先进入队列的元素,而是取出队列中最小的元素。PriorityQueue不允许插入null元素,PriorityQueue的元素有两种排序方式,一种自然排序(必须实现Comparable接口)另外一种定制排序(要传入一个Comparator对象)
2.Deque接口是Queue接口的子接口,它代表这一个双端的队列,允许通过这些方法从两端来操作元素,void addFrist(Object e)将指定元素插入该双端队列的开头;void addLast(Object e)将指定的元素插入到双端队列的末尾;Iterator descendingIterator():返回该队列对应的迭代器,该迭代器将逆向顺序来迭代队列的元素。Object getFrist()获取但不能删除双端队列的的一个元素,Object getLast()获取但不删除双端元素的末尾队列。Object peekFrist()获取但不删除双端元素的第一个也元素。Object poolFrist()获取并删除双端队列的第一个元素。boolean offerFrist(Object e)将指定的元素插入到双端队列的开头。Object pop():将一个元素push进该双端队列所表示的栈定顶。void push(Object e)将一个元素push进该双端队列所表示的栈的栈顶。Object removeFrist()获取并删除该双端队列的第一个元素。Object removeFristOccurrence(Object o)删除该双端队列的第一次出现的元素o。Deque接口提供了一个典型的实现类:ArrayDeque,它是基于数组实现的双端队列,创建Deque时同样可指定一个numElement参数指定数组的长度,Deque底层的数组的长度为16,它底层也是一个动态的可重分配的Object[] 数组来存储集合元素。ArrayDeque即可用做栈也可用作队列来使用。
3.LinkedList类是List接口的实现类,这意味这可以根据索引来随机访问数组元素,而它又实现了Deque接口,所以他也可以当做双端队列来使用,因此既可以当成栈也可以当成队列来使用。LinkedList作为List集合、双端队列、栈用法,是一个功能非常强大的集合类。但LinkedList与ArrayList、ArrayDeque的实现机制完全不同,ArrayList、ArrayDeque内部以数组的形式保存集合,随机访问元素性能较好,而LinkedList内部以链表的形式保存数据,随机访问性能较差,但插入、删除元素性能较好,Vertor也是数组子形式存储但是他线程安全所以性能都不好。
相关文章推荐
- Java排序算法——选择排序
- Spring—struts2整合
- Java中hashCode()方法以及HashMap()中hash()方法
- Spring Mvc那点事---(30)Spring Mvc传统AOP自动代理实现
- JFrame设置最大尺寸
- JAVA8 十大新特性详解
- 编程中遇到的因脑残造成的错误--struts2(2016/7/14)
- java异常处理
- java语言及其垃圾回收机制简单概述
- Java工程师需要掌握哪些知识呢?
- struts2 提供的校验器列表
- JAVA的IO操作(四)
- struts2 校验数据的有效性 2种方式
- Java多线程--线程简单认识1
- JDK 7 新特性 - 总览
- 基于spring security的用户单点登录
- Spring学习笔记四: 从Spring容器中获取Bean
- Spring学习笔记四: 从Spring容器中获取Bean
- springmvc+spring+mybatis+mysql框架整合(maven模块化分层)02
- 为什么要使用Java泛型