Java数据结构数组列表与链表

Java数据结构数组列表与链表,java,data-structures,Java,Data Structures,我有一个随机生成的数字列表,希望将它们存储在一个结构中,然后按照生成顺序将它们从结构中删除 因此,我需要一个具有最佳删除优先的数据结构 链表和数组列表都已删除O(1) 一个比另一个好吗?如果是,以什么方式?在Java中,LinkedList类实现了队列接口。这意味着它是一个队列。如果使用.add(),您将把东西放在列表(队列)的末尾,如果使用.remove(),您将从列表(队列)的开头提取东西 从ArrayList检索是O(1),但删除不是。考虑以下事项: ArrayList<Intege

我有一个随机生成的数字列表,希望将它们存储在一个结构中,然后按照生成顺序将它们从结构中删除

因此,我需要一个具有最佳删除优先的数据结构

链表和数组列表都已删除O(1)


一个比另一个好吗?如果是,以什么方式?

在Java中,
LinkedList
类实现了
队列
接口。这意味着它是一个队列。如果使用
.add()
,您将把东西放在列表(队列)的末尾,如果使用
.remove()
,您将从列表(队列)的开头提取东西

ArrayList
检索是O(1),但删除不是。考虑以下事项:

ArrayList<Integer> al = new ArrayList<Integer>();
al.add(1);
al.add(2);
al.add(3);
ArrayList al=new ArrayList();
al.添加(1);
al.添加(2);
al.添加(3);
您的列表
al
现在是
{1,2,3}

现在执行:
al.remove(0)


在那之后,
al
{2,3}
。但要实现这一点,一旦移除列表的头部,头部之后的所有其他对象都需要向下移动一个单位。所以它实际上是O(n)。如果要移除尾部,则移除仅为O(1)。但是每次你都需要移除头部。

可能重复:听起来你需要排队。总的来说,谷歌很容易发现这一点-1是的,但这些是一般性移除(即中间的案例)。对我来说,我只处理remove first,O(1)这两种情况,这意味着我使用哪一种并不重要。但我想知道我的思维过程是否正确。排队正是我所想的。但我是被禁止使用的。阵法列表会自动将元素下移吗?所以,如果我做了两次al.remove(0)。它会先去掉1,然后去掉2?我以为索引0在第一次删除后将为空?@ealeon请思考如果它没有删除会发生什么。当您从中间删除元素时,列表将变得支离破碎。如果你的列表是零碎的,你怎么能随机访问?如果整个阵列都有间隙,您如何知道从
al[0]
al[324]
的距离?数组(和数组列表)的定义特性是连续的。请参阅答案,如果它帮助您理解。谢谢