📜  Java的ArrayList 与 LinkedList(1)

📅  最后修改于: 2023-12-03 15:16:36.808000             🧑  作者: Mango

Java的ArrayList 与 LinkedList

Java中的ArrayList和LinkedList都是实现了List接口的类,用于存储单个类型的集合元素。两者内部的实现机制不同,各有优缺点。

ArrayList
实现机制

ArrayList的存储结构是“可变数组”,底层是通过数组实现的。在进行大量的插入和删除操作时,数组需要进行大量的拷贝和移动,执行效率较低。

特点
  • ArrayList的查询操作效率较高,时间复杂度为O(1);

  • 插入和删除操作效率较低,时间复杂度为O(n);

  • ArrayList是线程不安全的,不适合多线程环境;

  • ArrayList支持随机访问,可以通过下标直接访问其中的元素;

  • ArrayList在内存空间上占用相对较小。

代码示例
// 创建ArrayList集合
ArrayList<String> list = new ArrayList<>();

// 添加元素
list.add("Java");
list.add("C++");
list.add("Python");

// 查询元素
String element = list.get(0);

// 删除元素
list.remove("C++");
LinkedList
实现机制

LinkedList的存储结构是“双向链表”,即每个元素都存储了前驱和后继节点的引用。在进行插入和删除操作时,只需要修改相邻节点的引用,执行效率较高。

特点
  • LinkedList的插入和删除操作效率较高,时间复杂度为O(1);

  • 查询操作效率较低,时间复杂度为O(n);

  • LinkedList是线程不安全的,不适合多线程环境;

  • LinkedList不支持随机访问,只能通过遍历访问其中的元素;

  • LinkedList在内存空间上占用相对较大。

代码示例
// 创建LinkedList集合
LinkedList<String> list = new LinkedList<>();

// 添加元素
list.add("Java");
list.add("C++");
list.add("Python");

// 查询元素
String element = list.get(0);

// 删除元素
list.remove("C++");
总结

ArrayList和LinkedList各有优缺点,在不同的场景下需要选择不同的集合类型。如果需要频繁进行查询操作,建议使用ArrayList;如果需要频繁进行插入和删除操作,建议使用LinkedList。