Baz*_*Baz 265
List有方法add(int, E),所以你可以使用:
list.add(0, yourObject);
Run Code Online (Sandbox Code Playgroud)
之后您可以删除最后一个元素:
if(list.size() > 10)
list.remove(list.size() - 1);
Run Code Online (Sandbox Code Playgroud)
但是,您可能需要重新考虑您的要求或使用不同的数据结构,例如 Queue
编辑
也许看看Apache的CircularFifoQueue:
CircularFifoQueue是一个先进先出队列,具有固定大小,如果已满,则替换其最旧的元素.
只需用最大尺寸初始化它:
CircularFifoQueue queue = new CircularFifoQueue(10);
Run Code Online (Sandbox Code Playgroud)
pat*_*ckf 24
存在各种数据结构,这些数据结构被优化用于在第一索引处添加元素.但请注意,如果您将您的收藏转换为其中之一,那么对话可能需要时间和空间的复杂性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"
Run Code Online (Sandbox Code Playgroud)
插入的空间和时间复杂度是使用LinkedListconstant(O(1)).请参阅Big-O备忘单.
一种非常简单但效率低下的方法是使用reverse:
Collections.reverse(list);
list.add(elementForTop);
Collections.reverse(list);
Run Code Online (Sandbox Code Playgroud)
O(n)O(1)查看JDK实现,这具有O(n)时间复杂性,因此仅适用于非常小的列表.
你可以看一下add(int index,E element):
将指定元素插入此列表中的指定位置.将当前位于该位置的元素(如果有)和任何后续元素向右移动(向其索引添加一个元素).
添加后,您可以检查ArrayList的大小并删除末尾的大小.