https://docs.oracle.com/javase/7/docs/api/java/util/Deque.html
我正在学习如何使用这个对象。
boolean add(E e)
将指定的元素插入此双端队列表示的队列中 (换句话说,在这个双端队列的尾部)是否可以这样做 立即不违反容量限制,返回true 成功后如果没有空格则抛出
IllegalStateException
目前可用。
我很困惑'如果目前没有空位。'我没有看到你设置大小的任何东西,它是否意味着没有空间,没有JVM?
我正在研究如何制作一个包含5个值的Deque,我想添加一个并在5时删除最旧的。
我希望这是有道理的,如果不是,请让我详细说明,我会。
非常感谢SOF社区!
答案 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);
}
}