2017-03-19 34 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); 
    } 
}