Java ArrayList 如何在开头添加元素
我需要将元素添加到队列中,但是当我调用函数以添加元素时,我希望它在数组的开头添加元素(因此它具有最低的索引),并且如果数组有10个元素,则添加新元素会导致删除最旧的元素(具有最高索引的元素)。ArrayList
有人有什么建议吗?
我需要将元素添加到队列中,但是当我调用函数以添加元素时,我希望它在数组的开头添加元素(因此它具有最低的索引),并且如果数组有10个元素,则添加新元素会导致删除最旧的元素(具有最高索引的元素)。ArrayList
有人有什么建议吗?
List
有 add(int, E)
方法,所以你可以使用:
list.add(0, yourObject);
之后,您可以使用以下命令删除最后一个元素:
if(list.size() > 10)
list.remove(list.size() - 1);
但是,您可能希望重新考虑您的需求或使用不同的数据结构,如队列
编辑
也许看看Apache的CircularFifoQueue
:
CircularFifoQueue
是一个先进先出的队列,具有固定大小,如果已满,则替换其最旧的元素。
只需使用最大大小初始化它:
CircularFifoQueue queue = new CircularFifoQueue(10);
有各种数据结构针对在第一个索引处添加元素进行了优化。但请注意,如果您将收藏转换为其中之一,则对话可能需要时间和空间复杂性O(n)
JDK包括Deque
结构,它提供了addFirst(e)
和offerFirst(e)
等方法。
Deque<String> deque = new LinkedList<>();
deque.add("two");
deque.add("one");
deque.addFirst("three");
//prints "three", "two", "one"
插入的空间和时间复杂度为常数 ()。请参阅 Big-O 备忘单。LinkedList
O(1)
一个非常简单但效率低下的方法是使用反向:
Collections.reverse(list);
list.add(elementForTop);
Collections.reverse(list);
O(n)
O(1)
看看JDK实现,这具有时间复杂性,因此仅适用于非常小的列表。O(n)