您的位置:首页 > 产品设计 > UI/UE

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处,如:

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。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java queue 操作