• Java中List不同实现类的对比


    Java中List不同实现类的对比

    在Java中,List接口是一个非常重要的集合接口,它表示一个有序的集合,可以包含重复的元素。List接口有很多不同的实现类,其中最常用的是ArrayListLinkedListVector。这些实现类在性能、使用方式和适用场景上有所不同。下面我们将逐一对比这些实现类,并通过代码示例来加深理解。

    1. ArrayList

    ArrayList是基于动态数组实现的,因此它提供了非常快的基于索引的访问(getset方法)。当你需要频繁地访问列表中的元素,或者列表的大小可以预先估计时,ArrayList是一个很好的选择。

    示例代码:

    import java.util.ArrayList;
    import java.util.List;
    
    public class ArrayListExample {
        public static void main(String[] args) {
            List<String> list = new ArrayList<>(); // 创建一个新的ArrayList实例
            list.add("元素1"); // 向列表中添加元素
            list.add("元素2");
            list.add("元素3");
    
            // 基于索引访问元素
            System.out.println("第一个元素:" + list.get(0)); // 输出:第一个元素:元素1
    
            // 修改索引位置的元素
            list.set(1, "修改后的元素2");
            System.out.println("修改后的列表:" + list); // 输出:修改后的列表:[元素1, 修改后的元素2, 元素3]
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    2. LinkedList

    LinkedList是基于双向链表实现的,因此它在插入和删除元素时非常高效(特别是在列表的开头或结尾)。如果你需要频繁地在列表的开头或结尾添加或删除元素,或者你需要实现一个队列或栈,那么LinkedList是一个不错的选择。

    示例代码:

    import java.util.LinkedList;
    import java.util.List;
    
    public class LinkedListExample {
        public static void main(String[] args) {
            List<String> list = new LinkedList<>(); // 创建一个新的LinkedList实例
            list.add("元素1"); // 向列表中添加元素
            list.add("元素2");
            list.add("元素3");
    
            // 在列表开头添加元素
            list.addFirst("新元素0");
    
            // 在列表结尾删除元素
            String lastElement = list.removeLast();
            System.out.println("删除的元素:" + lastElement); // 输出:删除的元素:元素3
    
            // 输出修改后的列表
            System.out.println("修改后的列表:" + list); // 输出:修改后的列表:[新元素0, 元素1, 元素2]
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    3. Vector

    VectorArrayList非常相似,也是基于动态数组实现的。但是,Vector是线程安全的(即它在多线程环境中是安全的),而ArrayList则不是。由于线程安全性的开销,Vector通常比ArrayList慢。在大多数情况下,我们更倾向于使用ArrayList,除非我们需要线程安全性的保证。

    注意: 在现代Java开发中,由于Collections.synchronizedList()方法和并发集合(如CopyOnWriteArrayList),Vector的使用已经相对较少。

    示例代码:

    import java.util.Vector;
    
    public class VectorExample {
        public static void main(String[] args) {
            Vector<String> vector = new Vector<>(); // 创建一个新的Vector实例
            vector.add("元素1"); // 向列表中添加元素
            vector.add("元素2");
            vector.add("元素3");
    
            // 输出列表内容
            System.out.println("Vector内容:" + vector); // 输出:Vector内容:[元素1, 元素2, 元素3]
    
            // 由于Vector是线程安全的,通常不需要额外的同步
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    总结
    • ArrayList:基于动态数组,提供快速的基于索引的访问,适用于需要频繁访问元素或可以预先估计大小的场景。
    • LinkedList:基于双向链表,提供快速的插入和删除操作(特别是在列表的开头或结尾),适用于需要频繁在列表开头或结尾添加或删除元素的场景。
    • Vector:与ArrayList类似,但提供线程安全性,通常比ArrayList慢,在现代Java开发中较少使用。
  • 相关阅读:
    中国人民大学与加拿大女王大学金融硕士——不忘初心,点燃梦想之火
    centos6.5 搭建FTP服务器
    做好troubleshooting的必要条件
    本教程旨在为正在构建,部署和使用CarbonData的最终用户和开发人员提供故障排除。
    1965. 丢失信息的雇员
    MATLAB创建avi文件
    仿大众点评——秒杀系统部分02
    docker基础命令
    9.17 校招 实习 内推 面经
    DRF JWT认证(一)
  • 原文地址:https://blog.csdn.net/qq_36720723/article/details/138925145