• Java中ArrayList 和 LinkedList 的区别是什么?


    Java中ArrayList 和 LinkedList 的区别是什么?

    ArrayListLinkedList 都是Java中常用的集合类,它们用于存储和操作元素的容器,但在内部实现和使用方式上有很大的区别。以下是它们的区别、作用、优缺点以及示例说明:

    区别

    1. 内部数据结构

      • ArrayList 使用动态数组来存储元素,它在内存中是连续的。
      • LinkedList 使用双向链表来存储元素,它在内存中不是连续的,每个元素都包含对前一个和后一个元素的引用。
    2. 访问速度

      • ArrayList 可以快速访问和修改元素,因为它支持随机访问,通过索引可以在常数时间内获取元素。
      • LinkedList 在访问和修改元素时需要遍历链表,访问速度相对较慢。
    3. 插入和删除速度

      • ArrayList 在中间插入或删除元素时相对较慢,因为需要移动元素。
      • LinkedList 在中间插入或删除元素时更快,因为只需要调整链表中的引用。
    4. 空间复杂度

      • ArrayList 相对节约空间,因为它只需要存储元素和一些额外的空间用于扩容。
      • LinkedList 存储元素时需要额外的空间用于存储链表节点。

    作用

    • ArrayListLinkedList 都用于存储和管理元素的集合,通常用于实现列表、队列、栈等数据结构,以及在需要快速随机访问元素的场景。

    ArrayList的优缺点

    • 优点

      • 快速随机访问:通过索引可以在常数时间内获取元素。
      • 适用于读多写少的场景。
    • 缺点

      • 中间插入/删除元素较慢,需要移动元素。
      • 扩容时会导致一定的性能损失。

    LinkedList的优缺点

    • 优点

      • 中间插入/删除元素较快,只需要调整链表的引用。
      • 适用于频繁插入和删除元素的场景。
    • 缺点

      • 随机访问元素较慢,需要遍历链表。
      • 消耗更多内存,因为每个元素都需要一个链表节点对象。

    示例代码

    下面是使用ArrayListLinkedList的示例:

    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("Apple");
            arrayList.add("Banana");
            arrayList.add("Cherry");
    
            // 使用LinkedList
            List<String> linkedList = new LinkedList<>();
            linkedList.add("Apple");
            linkedList.add("Banana");
            linkedList.add("Cherry");
    
            // 遍历ArrayList
            System.out.println("ArrayList:");
            for (String fruit : arrayList) {
                System.out.println(fruit);
            }
    
            // 遍历LinkedList
            System.out.println("\nLinkedList:");
            for (String fruit : linkedList) {
                System.out.println(fruit);
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    在这个示例中,我们创建了一个包含水果的 ArrayListLinkedList,然后遍历它们。请注意,在这个示例中,两者的输出是相同的,但在实际使用中,根据需求选择合适的集合类来提高性能。如果需要频繁插入和删除元素,LinkedList 可能更适合,如果需要快速随机访问元素,ArrayList 可能更合适。

  • 相关阅读:
    需求分析简介
    RabbitMQ、Kafka对比(超详细),Kafka、RabbitMQ、RocketMQ的区别
    C语言小游戏------贪吃蛇----小白专用
    【SQL每日一练】HackerRan-Basic Join-Challenges练习
    Mybatis的二级缓存 (ehcache方式)
    Go 项目配置文件的定义和读取
    中间件简介
    文件管理的功能
    算法(四)
    黄州科目三
  • 原文地址:https://blog.csdn.net/sanmansan/article/details/133693085