Java:如何使用Deque?

时间:2017-03-19 17:15:15

标签: java deque

https://docs.oracle.com/javase/7/docs/api/java/util/Deque.html

我正在学习如何使用这个对象。

  

boolean add(E e)

     

将指定的元素插入此双端队列表示的队列中   (换句话说,在这个双端队列的尾部)是否可以这样做   立即不违反容量限制,返回true   成功后如果没有空格则抛出IllegalStateException   目前可用。

我很困惑'如果目前没有空位。'我没有看到你设置大小的任何东西,它是否意味着没有空间,没有JVM?

我正在研究如何制作一个包含5个值的Deque,我想添加一个并在5时删除最旧的。

我希望这是有道理的,如果不是,请让我详细说明,我会。

非常感谢SOF社区!

2 个答案:

答案 0 :(得分: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 Commons集合 - CircularFifoBuffer

答案 1 :(得分: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);
    }
}