Java 中 ArrayList 和 LinkedList 之间的区别

ArrayList 和 LinkedList 都实现了 List 接口,但有什么区别呢?ArrayList 和 LinkedList 之间的主要区别在于 ArrayList,它是使用可扩展数组实现的。随着更多项添加到 ArrayList 中,其大小会动态增加。它的元素可以直接使用 get() 和 set() 方法访问,因为 ArrayList 本质上是一个数组。

LinkedList 是作为链表实现的,这些添加和删除性能比 ArrayList 更好,但它们对 get() 和 set() 方法不利。

在本文中,我们将了解 LinkedList 和 ArrayList 之间的一些差异,并尝试了解何时何地使用 LinkedList 而不是 ArrayList。

ArrayList 与 LinkedList

LinkedList 和 ArrayList 之间的所有差异都有一个来源,即数组和 LinkedList (链表)之间的区别。

1) 由于在 ArrayList 中搜索基于元素的索引,因此速度非常快。get(index) 具有 O(1) 的复杂度,但移除成本很高,因为您必须偏移所有元素。在 LinkedList 的情况下,它不能直接访问项目,您必须遍历整个列表才能检索项目,其复杂度等于 O(n).

2) 与 ArrayList 相比,在 LinkedList 中插入很容易,因为在调整大小并将项目添加到 LinkedList 时没有风险,并且其复杂度等于 O(1), 而 ArrayList 在最坏的情况下会移动复杂度为 O(n) 的所有元素。

3) 删除就像插入一样,在 LikedList 中比在 ArrayList 中更好。

4) LinkedList 的内存比 ArrayList 多,因为在 ArrayList 中,每个索引都链接到当前对象, 但在 LinkedList 的情况下,每个节点都与下一个和上一个节点的元素和地址链接。

何时在 Java

显然,LinkedList 不像 ArrayList 那样流行,但在某些情况下仍然是一个不错的选择:

1) 您的应用程序不需要随机访问, 因为在本例中,此操作包括遍历整个列表。

2) 应用程序的插入和删除次数多于恢复次数。在 LikedList.

中,当您需要非同步访问时,在 Java 中使用 ArrayList 这两个操作都更快。ArrayList 快速且易于使用。

ArrayList

ArrayList<字符串>al = 新的 ArrayList<字符串>();
al.add(a”);
al.add(c”);
al.add(e”);
al.add(z”);
al.add(t”);
al.add(m”);

for(String s: e){
System.out.println(e);
}

LinkedList

LinkedList<整数>llist = 新的 LinkedList<整数>();
llist.add(8);
llist.add(9);
llist.add(5);
llist.add(2);
llist.add(6);

迭代器<整数>它 = llist.iterator();
while(it.hasNext()){
System.out.println(it.next());
}

ArrayList 和 LinkedList 的性能

两个列表的时间复杂度: