java-Queue的add/offer/put,remove/poll/take,element/peek异同
2017-09-28 15:44
483 查看
记录一下java中,Queue的add/offer/put,remove/poll/take,element/peek方法的差异。
1. add/offer/put的区别
add会在队列尾部增加一个元素,但是如果队列已满,会抛出unchecked 异常;offer在向一个已满的队列中添加新元素时,会返回false,不会抛异常;put方法只存在于****BlockingQueue类型的阻塞队列中,使用put方法向已满的队列添加新元素时,代码会阻塞在put处,如:
2. remove/poll/take的区别
remove是从队列头部【移除】一个元素,take和poll都是从队列头部【拿出】一个元素,就是从头部得到并移除该元素。remove在移除空队列的头部元素时,remove会抛出NoSuchElementException异常;poll空队列的头部元素时返回null,不抛异常;而take与上面的put方法对应,只存在阻塞队列中,且获得空队列的头部元素时,会阻塞在获取的位置;
3. element/peek的区别
首先两者都是用于查询队列的头部元素,但不移除。区别在于,队列为空为,peek方法与poll方法一样,返回null,而element方法与remove方法相同,抛出异常。
从上面的区别可知:
1. put/take方法在****BlockingQueue类型的阻塞队列中使用,可用于多线程对同一数据的同步处理过程中,如数据流的写入与读取等;
2. add/remove/element属于同组方法,对异常操作会抛出异常处理
3. offer/poll/peek属于同组方法,对于异常操作不会跑出异常,只会返回false。
1. add/offer/put的区别
add会在队列尾部增加一个元素,但是如果队列已满,会抛出unchecked 异常;offer在向一个已满的队列中添加新元素时,会返回false,不会抛异常;put方法只存在于****BlockingQueue类型的阻塞队列中,使用put方法向已满的队列添加新元素时,代码会阻塞在put处,如:
public static void main(String args[]){ try { LinkedBlockingQueue<String> queue=new LinkedBlockingQueue(2); queue.put("This"); queue.put("is"); queue.put("me"); // 代码会阻塞在queue.put("me"); ,下边的print不会输出 System.out.println("me"); } catch (Exception e) { e.printStackTrace(); } }
2. remove/poll/take的区别
remove是从队列头部【移除】一个元素,take和poll都是从队列头部【拿出】一个元素,就是从头部得到并移除该元素。remove在移除空队列的头部元素时,remove会抛出NoSuchElementException异常;poll空队列的头部元素时返回null,不抛异常;而take与上面的put方法对应,只存在阻塞队列中,且获得空队列的头部元素时,会阻塞在获取的位置;
3. element/peek的区别
首先两者都是用于查询队列的头部元素,但不移除。区别在于,队列为空为,peek方法与poll方法一样,返回null,而element方法与remove方法相同,抛出异常。
从上面的区别可知:
1. put/take方法在****BlockingQueue类型的阻塞队列中使用,可用于多线程对同一数据的同步处理过程中,如数据流的写入与读取等;
2. add/remove/element属于同组方法,对异常操作会抛出异常处理
3. offer/poll/peek属于同组方法,对于异常操作不会跑出异常,只会返回false。
相关文章推荐
- Queue中offer&add与poll&remove与peek&element的区别
- LinkedBlockingQueue的put,add,offer和poll,remove,take的区别
- Queue的那些事(remove/poll, add/offer, element/peek)
- java Queue中 remove/poll, add/offer, element/peek
- java.util.Queue接口add()和remove(),add()和remove(),element()或者peek()区别
- java Queue中 remove/poll, add/offer, element/peek区别
- Queue中offer/add,poll/remove,peek/element区别
- 多线程之BlockingQueue中 take、offer、put、add的一些比较
- LinkedBlockingQueue的put,add跟offer的区别
- LinkedBlockingQueue的put,add跟offer的区别
- LinkedBlockingQueue的put,add跟offer的区别
- java Queue中 remove/poll, add/offer, element/peek区别
- LinkedBlockingQueue的put,add跟offer的区别
- java Queue中 add/offer,element/peek,remove/poll区别
- java Queue中 remove/poll, add/offer, element/peek区别
- LinkedBlockingQueue的put,add跟offer的区别
- LinkedBlockingQueue的put,add跟offer的区别
- add/remove operation is impossible, because the code element
- java.util.LinkedList<E>中offer和add的区别
- add/remove operation is impossible, because the code element 'Cxxx' is read only