ArrayList vs LinkedList efficiency



我有一个问题,在开始时在列表中使用了大量插入,之后搜索和检索操作被广泛使用,那么哪种方法是好的和有效的呢?

方法1: 使用LinkedList作为整个程序的数据结构。

方法 2: 使用 ArrayList 作为整个程序的数据结构。

方法 3: 在开始时使用 LinkedList 作为我的数据结构进行插入并执行 Arraylist al = new Arraylist(ll); 用于检索操作。

更改数据结构的成本是多少?真的值得这样做吗?

由于它们都实现相同的接口,因此您可以通过编写代码来自己找到这一点,以便可以插入构造函数并以两种方式测试代码。基准测试可以通过 jmh 完成。

可以使用供应商接口插入构造函数。

根据问题的性质,您可能会发现使用 Deque 是合适的。

请允许我建议第四种方法:对整个程序使用 ArrayDeque。它在前面和后面都有高效的插入(可能比LinkedList更快(和搜索效率,就像ArrayList一样。 ArrayDeque是Java集合框架中一个被不公平地忽视的类,可能是因为它是后来添加的(我认为Java 6(。它实现List接口,因此您必须专门为它编写程序。

除此之外,您的问题只有两个有效的答案是

  1. 在绝对必要之前,不要担心效率。
  2. 如果您必须担心效率,则必须自行衡量环境中数据的性能令人满意。这里没有人能告诉你。

这取决于插入和检索操作的频率。以下是复杂性:

  • ArrayList -> 开头插入:O(n(
  • ArrayList -> 基于索引的检索:O(1(
  • LinkedList -> 开头插入:O(1(
  • LinkedList -> 基于索引的检索:O(i(,其中 i 是要扫描的元素数。

因此,如果您的检索次数多于插入次数,请进行ArrayList,如果没有,请LinkedList

最新更新