我有一个随机生成的数字列表,并希望将它们存储在一个结构中,然后按照它们生成的顺序从结构中删除它们。
所以,我需要一个最好先删除的数据结构。
链接列表和数组列表都删除了O(1)
一个比另一个好吗?如果是这样,以什么方式?
答案 0 :(得分:7)
在Java中,LinkedList
类实现Queue
接口。这意味着它可以作为一个队列。如果你使用.add()
,你会把东西放在列表的末尾(队列),如果你使用.remove()
,你将从列表的头部(队列)中提取东西。
从ArrayList
检索是O(1),但删除不是。请考虑以下事项:
ArrayList<Integer> al = new ArrayList<Integer>();
al.add(1);
al.add(2);
al.add(3);
您的列表al
现在是{1, 2, 3}
。
现在你做:al.remove(0)
之后,al
为{2, 3}
。但是为了实现这一点,一旦你移除了列表的头部,所有其他对象在之后需要向下移动一个单元。所以它实际上是O(n)。如果要移除尾部,则移除仅为O(1)。但你每次都需要移开头部。