首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Arraylist 与 LinkedList 异同

Arraylist 与 LinkedList 异同

原创
作者头像
代码小李
发布2025-01-30 18:26:20
发布2025-01-30 18:26:20
3120
举报

ArrayListLinkedList 是 Java 集合框架中两种常用的列表实现,它们都实现了 List 接口。尽管它们提供了类似的功能,但在内部实现和性能特性上存在显著差异。以下是 ArrayListLinkedList 的主要异同点:

相同点

  1. 接口实现:两者都实现了 List 接口,因此都支持列表的基本操作,如添加、删除、获取和设置元素。
  2. 线程安全性:两者都不是线程安全的,如果需要在多线程环境中使用,需要外部同步。
  3. 允许 null 值:两者都允许存储 null 值。

不同点

  1. 内部实现
    • ArrayList:基于动态数组实现,底层是一个对象数组。
    • LinkedList:基于双向链表实现,每个元素(节点)包含前一个节点和后一个节点的引用。
  2. 内存占用
    • ArrayList:内存占用相对较小,因为只需要存储数组。
    • LinkedList:内存占用较大,因为每个节点除了存储数据外,还需要存储前后节点的引用。
  3. 访问元素
    • ArrayList:通过索引访问元素的时间复杂度为 O(1),因为可以直接通过数组索引访问。
    • LinkedList:通过索引访问元素的时间复杂度为 O(n),因为需要从头或尾遍历到指定位置。
  4. 插入和删除元素
    • ArrayList:在列表末尾插入或删除元素的时间复杂度为 O(1),但在中间位置插入或删除元素的时间复杂度为 O(n),因为需要移动后续元素。
    • LinkedList:在列表任意位置插入或删除元素的时间复杂度为 O(1),因为只需要修改节点的引用,但查找位置的时间复杂度为 O(n)。
  5. 扩容机制
    • ArrayList:当数组容量不足时,会自动扩容,通常扩容为原容量的 1.5 倍(具体倍数取决于实现)。
    • LinkedList:不需要扩容,因为链表的大小是动态的。

示例代码

以下是一些示例代码,展示了如何使用 ArrayListLinkedList

代码语言:java
复制
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class ListExample {
    public static void main(String[] args) {
        // 创建 ArrayList
        List<String> arrayList = new ArrayList<>();
        arrayList.add("A");
        arrayList.add("B");
        arrayList.add("C");

        // 创建 LinkedList
        List<String> linkedList = new LinkedList<>();
        linkedList.add("X");
        linkedList.add("Y");
        linkedList.add("Z");

        // 访问元素
        System.out.println("ArrayList 第二个元素: " + arrayList.get(1));
        System.out.println("LinkedList 第二个元素: " + linkedList.get(1));

        // 插入元素
        arrayList.add(1, "D");
        linkedList.add(1, "W");

        // 删除元素
        arrayList.remove(1);
        linkedList.remove(1);

        // 打印列表
        System.out.println("ArrayList: " + arrayList);
        System.out.println("LinkedList: " + linkedList);
    }
}

总结

  • ArrayList 适合需要频繁随机访问元素的场景。
  • LinkedList 适合需要频繁插入和删除元素的场景。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 相同点
  • 不同点
  • 示例代码
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档