我需要向ArrayList队列添加元素,但当我调用函数添加一个元素时,我希望它在数组的开头添加元素(因此它有最低的索引),如果数组有10个元素,添加一个新的结果是删除最古老的元素(具有最高索引的元素)。
有人有什么建议吗?
我需要向ArrayList队列添加元素,但当我调用函数添加一个元素时,我希望它在数组的开头添加元素(因此它有最低的索引),如果数组有10个元素,添加一个新的结果是删除最古老的元素(具有最高索引的元素)。
有人有什么建议吗?
当前回答
我认为实现应该很简单,但是考虑到效率,你应该使用LinkedList而不是ArrayList作为容器。你可以参考以下代码:
import java.util.LinkedList;
import java.util.List;
public class DataContainer {
private List<Integer> list;
int length = 10;
public void addDataToArrayList(int data){
list.add(0, data);
if(list.size()>10){
list.remove(length);
}
}
public static void main(String[] args) {
DataContainer comp = new DataContainer();
comp.list = new LinkedList<Integer>();
int cycleCount = 100000000;
for(int i = 0; i < cycleCount; i ++){
comp.addDataToArrayList(i);
}
}
}
其他回答
List有add(int, E)方法,所以你可以使用:
list.add(0, yourObject);
然后你可以删除最后一个元素:
if(list.size() > 10)
list.remove(list.size() - 1);
但是,您可能需要重新考虑您的需求或使用不同的数据结构,如Queue
EDIT
也许可以看看Apache的CircularFifoQueue:
CircularFifoQueue是一个先进先出队列,具有固定大小,如果已满则替换其最老的元素。
用你的最大大小初始化它:
CircularFifoQueue queue = new CircularFifoQueue(10);
你可以使用
public List<E> addToListStart(List<E> list, E obj){
list.add(0,obj);
return (List<E>)list;
}
使用数据类型更改E
如果需要删除最老的元素,则可以添加:
list.remove(list.size()-1);
在return语句之前。否则list将在开始时添加对象并保留最古老的元素。
这将删除列表中的最后一个元素。
我遇到了类似的问题,试图在现有数组的开头添加一个元素,将现有元素向右移动,并丢弃最古老的元素(数组[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
祝你好运
你可以看一下add(int index, E element):
将指定元素插入到此列表中的指定位置。 移动当前位于该位置(如果有)的元素 右边的后续元素(给它们的下标加1)。
一旦你添加了数组列表,你就可以检查数组列表的大小,并删除末尾的数组列表。
举个例子:-
List<String> element1 = new ArrayList<>();
element1.add("two");
element1.add("three");
List<String> element2 = new ArrayList<>();
element2.add("one");
element2.addAll(element1);