Java集合框架理解:ArrayList和LinkedList的区别示例

原创 女爷i 2024-11-12 10:21 22阅读 0赞

Java集合框架中的ArrayListLinkedList都是实现了List接口的类,它们都可以用来存储一系列的元素,但是它们在内部数据结构和性能上有所不同。以下是ArrayListLinkedList的一些主要区别:

  1. 内部数据结构
  • ArrayList是基于动态数组实现的,它在内存中是连续存储的。
  • LinkedList是基于双向链表实现的,每个元素都包含对前一个和后一个元素的引用。
  1. 随机访问性能
  • ArrayList支持快速的随机访问,即通过索引快速访问元素,时间复杂度为O(1)。
  • LinkedList不支持快速随机访问,访问特定位置的元素需要从头或尾开始遍历,时间复杂度为O(n)。
  1. 插入和删除性能
  • ArrayList在数组中间插入或删除元素时需要移动元素,这会导致较高的性能开销,时间复杂度为O(n)。
  • LinkedList在任何位置插入或删除元素都很快,只需要改变节点的引用,时间复杂度为O(1),但实际性能可能受到链表长度的影响。
  1. 内存占用
  • ArrayList的内存占用通常比LinkedList少,因为它不需要存储额外的引用。
  • LinkedList需要存储额外的引用(指向前一个和后一个元素的引用),因此内存占用更多。
  1. 线程安全
    -两者都不是线程安全的,如果需要线程安全,可以使用Vector(基于ArrayList)或CopyOnWriteArrayList

下面是一个简单的示例,展示如何在Java中使用ArrayListLinkedList

```javaimport java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class ListExample {
public static void main(String[] args) {
// 使用ArrayListList arrayList = new ArrayList<>();
arrayList.add(“Java”);
arrayList.add(“Python”);
arrayList.add(“C++”);
System.out.println(“ArrayList: “ + arrayList);

// 使用LinkedListList linkedList = new LinkedList<>();
linkedList.add(“Java”);
linkedList.add(“Python”);
linkedList.add(“C++”);
System.out.println(“LinkedList: “ + linkedList);

//随机访问 System.out.println(“ArrayList get(1): “ + arrayList.get(1));
System.out.println(“LinkedList get(1): “ + linkedList.get(1));

//插入元素 arrayList.add(1, “JavaScript”);
linkedList.add(1, “JavaScript”);
System.out.println(“ArrayList after add: “ + arrayList);
System.out.println(“LinkedList after add: “ + linkedList);

// 删除元素 arrayList.remove(1);
linkedList.remove(1);
System.out.println(“ArrayList after remove: “ + arrayList);
System.out.println(“LinkedList after remove: “ + linkedList);
}
}
``在这个示例中,我们创建了两个List对象,一个使用ArrayList,另一个使用LinkedList`。我们添加、访问、插入和删除元素,以展示两种实现的不同性能特点。

文章版权声明:注明蒲公英云原创文章,转载或复制请以超链接形式并注明出处。

发表评论

表情:
评论列表 (有 0 条评论,22人围观)

还没有评论,来说两句吧...

相关阅读