2017-03-19 39 views
0

https://docs.oracle.com/javase/7/docs/api/java/util/Deque.htmlJava:如何使用Deque的?

我正在學習如何使用這個對象。

boolean add(E e)

插入指定的元素插入此雙端 (換句話說,在該雙端隊列的尾部)所表示的隊列是否有可能這樣做 立即且不違反容量限制,返回true 成功後投擲IllegalStateException如果沒有空間 當前可用。

我就糊塗了「如果當前沒有空間可用。」我沒有看到任何設置大小的地方,是否意味着沒有空間,沒有JVM?

我期待到如何使一個deque持有5個價值觀和我想補充一個和清除最久,當它是在5

我希望這是有道理的,如果不是請讓我來闡述我會的。

非常感謝SOF社區!

+3

「我沒有看到任何設置大小的地方」 - 這是因爲它是特定於實現的。從文檔:「大多數Deque實現對它們可能包含的元素的數量沒有固定的限制,但是該接口支持容量限制的deques以及沒有固定大小限制的deque。」例如,請參閱https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/LinkedBlockingDeque.html。 –

+0

Deque是一個接口,如果你看看實現類,他們有一個構造函數,你可以在其中指定一個初始容量 – ochi

+0

*我正在研究如何使一個Deque *:不*創建一個Deque實現。只需*在課堂中使用*,如果達到大小限制,則在添加之前刪除最早的元素。 –

回答

0

如何使用的Deque(然後它只是包裝這個給你希望與幾個if聲明支持的方法):如果你想有某種循環緩衝區的

Deque<String> deq = new LinkedList<>(); //to have a fixed size, use ArrayDeque<E> 
deq.addFirst("a"); 
System.out.println(deq.peekFirst()); //a - just take a look, do not remove 

deq.addFirst("b"); 
System.out.println(deq.peekFirst()); //b 
System.out.println(deq.peekLast()); //a 

deq.addLast("c"); 
System.out.println(deq.peekLast()); //c 

deq.add("d"); 
System.out.println(deq.peekLast()); //d 

System.out.println(deq.pollLast()); //d - return and remove 
System.out.println(deq.pollLast()); //c 

,你可能想使用Apache的百科全書集合,而不是 - CircularFifoBuffer

0

這是我如何與一個Deque做到這一點 - 它很簡單,但我認爲它可以解決您所要解決的問題。

public class DequeExample { 
    Deque<Integer> deque = new ArrayDeque<>(); 

    public static void main(String[] args) { 

     DequeExample dequeExample = new DequeExample(); 

     // adding elements 
     for(int idx = 0; idx < 9; idx++){ 
      dequeExample.addNewest(idx); 
     } 
    } 

    private void addNewest(int newest){ 
     if(deque.size() == 5){ 
      System.out.println("Queue at capacity, removing element before adding more."); 
      Integer e = deque.removeLast(); 
      System.out.println("Removed: " + e); 
     } 

     deque.push(newest); 
     System.out.println("Added: " + newest); 
     System.out.println(deque); 
    } 
}