Leetcode树&深度优先搜寻&广度优先搜索

Java Queue中add/offer/put,element/peek,remove/poll/take的区别和联系

0x00 add()、offer()、put()

add():将指定的元素插入到此队列中(如果立即可行且不会违反容量限制),在成功时返回 true,如果当前没有可用空间,则抛出 IllegalStateException。

offer():将指定元素插入到此队列的尾部(如果立即可行且不会超出此队列的容量),在成功时返回 true,如果此队列已满,则返回 false。当使用有容量限制的队列时,此方法通常要优于 add 方法,后者可能无法插入元素,而只是抛出一个异常。

put():将指定元素插入到此队列的尾部,如有必要,则等待空间变得可用。put方法只存在于LinkedBlockingQueue/ArrayBlockingQueue类型的阻塞队列中,使用put方法向已满的队列添加新元素时,代码会阻塞在put处。

深入剖析java并发之阻塞队列LinkedBlockingQueue与ArrayBlockingQueue

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();  
        }  
    }  

0x01 poll()、remove()、take()

remove()poll()方法都是从队列中删除第一个元素。如果队列元素为空,调用remove()的行为与Collection接口的版本相似会抛出异常,但是新的poll()方法在用空集合调用时只是返回null。因此新的方法更适合容易出现异常条件的情况。而take()与上面的put()方法对应,只存在于阻塞队列中,且获得空队列的头部元素,会阻塞在获取的位置。

0x02 element()、peek()

element()peek()用于在队列的头部查询元素。与remove()方法类似,在队列为空时,element()抛出一个异常,而peek()返回null。

add增加一个元素如果队列已满,则抛出一个IllegalStateException异常
remove移除并返回队列头部的元素如果队列为空,则抛出一个NoSuchElementException异常
element返回队列头部的元素如果队列为空,则抛出一个NoSuchElementException异常
offer添加一个元素并返回true如果队列已满,则返回false
poll移除并返回队列头部的元素如果队列为空,则返回null
peek返回队列头部的元素如果队列为空,则返回null
put添加一个元素如果队列已满,则阻塞
take移除并返回队列头部的元素如果队列为空,则阻塞

标签: