List 接口的实现类

在 Java 中,List 是一个非常常用的接口,提供了有序、可重复的元素集合。List 接口有多个实现类,每个实现类都有其特定的特性和适用场景。以下是 Java 中主要实现了 List 接口的类及其详细介绍。

1. 常见的 List 实现类

1.1 ArrayList

  • 简介

    • 基于动态数组实现。
    • 提供快速的随机访问(getset 操作时间复杂度为 O(1))。
    • 适合频繁的读取操作,但在插入和删除时可能较慢,尤其是在列表中间位置。
  • 特点

    • 动态扩容:当数组容量不足时,会自动扩展(通常是当前容量的 1.5 倍)。
    • 允许 null 元素
    • 非同步:不适合多线程环境下的并发访问,除非外部同步。
  • 示例

    import java.util.ArrayList;
    import java.util.List;
    
    public class ArrayListExample {
         
         
        public static void main(String[] args) {
         
         
            List<String> arrayList = new ArrayList<>();
            arrayList.add("Apple");
            arrayList.add("Banana");
            arrayList.add("Cherry");
            arrayList.add("Apple"); // 允许重复元素
    
            System.out.println("ArrayList: " + arrayList);
        }
    }
    

    输出

    ArrayList: [Apple, Banana, Cherry, Apple]
    

1.2 LinkedList

  • 简介

    • 基于双向链表实现。
    • 适合频繁的插入和删除操作,特别是在列表的开头和中间位置。
    • 支持作为队列(FIFO)和双端队列(Deque)的实现。
  • 特点

    • 插入和删除效率高:在已知位置的插入和删除操作时间复杂度为 O(1)。
    • 随机访问较慢getset 操作时间复杂度为 O(n),因为需要遍历链表。
    • 允许 null 元素
  • 示例

    import java.util.LinkedList;
    import java.util.List;
    
    public class LinkedListExample {
         
         
        public static void main(String[] args) {
         
         
            List<String> linkedList = new LinkedList<>();
            linkedList.add("Apple");
            linkedList.add("Banana");
            linkedList.add("Cherry");
            linkedList.add("Apple"); // 允许重复元素
    
            System.out.println("LinkedList: " + linkedList);
        }
    }
    

    输出

    LinkedList: [Apple, Banana, Cherry, Apple]
    

1.3 Vector

  • 简介

    • 类似于 ArrayList,也是基于动态数组实现。
    • 是同步的,线程安全的。
    • 适合需要线程安全的场景,但由于同步开销,性能略低于 ArrayList
  • 特点

    • 同步:所有的公开方法都是同步的,适用于多线程环境。
    • 动态扩容:默认扩容策略与 ArrayList 略有不同(通常是当前容量的两倍)。
    • 允许 null 元素
  • 示例

    import java.util.List;
    import java.util.Vector;
    
    public class VectorExample {
         
         
        public static void main(String[] args) {
         
         
            List<String> vector = new Vector<>();
            vector.add("Apple");
            vector.add("Banana");
            vector.add("Cherry");
            vector.add("Apple"); // 允许重复元素
    
            System.out.println("Vector: " + vector);
        }
    }
    

    输出

    Vector: [Apple, Banana, Cherry, Apple]
    

1.4 Stack

  • 简介

    • 继承自 Vector,表示后进先出(LIFO)的堆栈。
    • 提供了额外的方法,如 pushpoppeek
  • 特点

    • 继承自 Vector:具备线程安全性。
    • LIFO 结构:适用于需要堆栈行为的场景。
    • 已过时:由于继承自 Vector,不推荐使用。Java 推荐使用 Deque 接口及其实现类(如 ArrayDeque)来实现堆栈。
  • 示例

    import java.util.Stack;
    
    public class StackExample {
         
         
        public static void main(String[] args) {
         
         
            Stack<String> stack = new Stack<>();
            stack.push("Apple");
            stack.push("Banana");
            stack.push("Cherry");
    
            System.out.println("Stack: " + stack);
    
            String top = stack.pop();
            System.out
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YiHanXii

呜呜呜我想喝奶茶

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值