我需要向ArrayList队列添加元素,但当我调用函数添加一个元素时,我希望它在数组的开头添加元素(因此它有最低的索引),如果数组有10个元素,添加一个新的结果是删除最古老的元素(具有最高索引的元素)。
有人有什么建议吗?
我需要向ArrayList队列添加元素,但当我调用函数添加一个元素时,我希望它在数组的开头添加元素(因此它有最低的索引),如果数组有10个元素,添加一个新的结果是删除最古老的元素(具有最高索引的元素)。
有人有什么建议吗?
当前回答
你可能想看看Deque。它使您可以直接访问列表中的第一个和最后一个项。
其他回答
您所描述的是使用Queue的合适情况。
因为你想添加新的元素,并删除旧的。你可以在结尾添加,也可以从开头删除。那不会有太大区别。
Queue有add(e)和remove()方法,它们分别在结尾添加新元素,并从开头删除旧元素。
Queue<Integer> queue = new LinkedList<Integer>();
queue.add(5);
queue.add(6);
queue.remove(); // Remove 5
因此,每次向队列添加元素时,都可以使用remove方法调用将其备份。
更新:
如果你想修复队列的大小,那么你可以看看:- ApacheCommons#CircularFifoBuffer
来自文档:-
CircularFifoBuffer是一个固定大小的先进先出缓冲区 如果已满,则替换最老的元素。
Buffer queue = new CircularFifoBuffer(2); // Max size
queue.add(5);
queue.add(6);
queue.add(7); // Automatically removes the first element `5`
如您所见,当达到最大大小时,添加新元素将自动删除插入的第一个元素。
你可能想看看Deque。它使您可以直接访问列表中的第一个和最后一个项。
我遇到了类似的问题,试图在现有数组的开头添加一个元素,将现有元素向右移动,并丢弃最古老的元素(数组[length-1])。 我的解决方案可能不是很高效,但它符合我的目的。
Method:
updateArray (Element to insert)
- for all the elements of the Array
- start from the end and replace with the one on the left;
- Array [0] <- Element
祝你好运
您可以使用列表方法,删除和添加
list.add(lowestIndex, element);
list.remove(highestIndex, element);
Java LinkedList提供了addFirst(E E)和push(E E)方法,用于将元素添加到列表前面。
https://docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html addFirst (E)