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 的情况下,每个节点都与下一个和上一个节点的元素和地址链接。
1) 您的应用程序不需要随机访问, 因为在本例中,此操作包括遍历整个列表。
2) 应用程序的插入和删除次数多于恢复次数。在 LikedList.
中,当您需要非同步访问时,在 Java 中使用 ArrayList 这两个操作都更快。ArrayList 快速且易于使用。
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 的性能
两个列表的时间复杂度: