当前位置: 首页 > article >正文

Java——列表(List)

概述

在 Java 中,列表(List) 是一种有序的集合,它允许元素重复,并且每个元素都有一个对应的索引值。Java 提供了 List 接口及其实现类,用于表示和操作列表数据。常用的实现类包括 ArrayList、LinkedList 和 Vector。

1、List接口概述

List 是 Java 集合框架中的一种接口,继承自 Collection 接口。它定义了许多常见的操作,如:

添加元素:add(E e)、add(int index, E element)
删除元素:remove(Object o)、remove(int index)
获取元素:get(int index)
修改元素:set(int index, E element)
查找元素:indexOf(Object o)、lastIndexOf(Object o)
获取列表大小:size()
判断是否包含元素:contains(Object o)
List 接口的常见方法:
add(E e):将元素添加到列表的末尾。
add(int index, E element):将元素插入到指定位置。
get(int index):返回指定位置的元素。
set(int index, E element):用指定元素替换指定位置的元素。
remove(int index):移除指定位置的元素。
remove(Object o):移除指定的元素。
contains(Object o):判断列表是否包含某个元素。
indexOf(Object o):返回某个元素首次出现的索引,若不存在则返回 -1。
size():返回列表的大小(元素个数)。
isEmpty():判断列表是否为空。

2、常见的List实现类

Java 提供了几种 List 接口的实现类,常用的有:
ArrayList:基于动态数组实现的列表,提供快速的随机访问,但插入和删除操作相对较慢,尤其是在中间插入时。
LinkedList:基于双向链表实现的列表,提供较快的插入和删除操作,但随机访问较慢。
Vector:类似于 ArrayList,但它是同步的,适用于多线程环境,不过现在通常推荐使用 ArrayList,除非你有线程安全的需求。

2-1、ArrayList

ArrayList 是基于数组实现的动态大小的列表。它提供了按索引快速访问元素的能力。虽然它的删除和插入操作相对较慢(特别是在中间位置),但其查找操作非常快速。

import java.util.ArrayList;
import java.util.List;

public class ArrayListExample {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();

        // 添加元素
        list.add("Alice");
        list.add("Bob");
        list.add("Charlie");

        // 获取元素
        System.out.println("第一个元素: " + list.get(0));  // Alice
        System.out.println("第二个元素: " + list.get(1));  // Bob

        // 修改元素
        list.set(1, "David");

        // 删除元素
        list.remove(0);  // 移除第一个元素

        // 打印列表
        System.out.println("更新后的列表: " + list);
    }
}

2-2、LinkedList

LinkedList 是基于双向链表实现的列表,提供更高效的插入和删除操作,但它的随机访问性能较差(需要从头开始遍历链表)。LinkedList 也实现了 Deque 接口,允许它在列表两端进行插入和删除操作。

import java.util.LinkedList;
import java.util.List;

public class LinkedListExample {
    public static void main(String[] args) {
        List<String> list = new LinkedList<>();

        // 添加元素
        list.add("Alice");
        list.add("Bob");
        list.add("Charlie");

        // 获取元素
        System.out.println("第一个元素: " + list.get(0));  // Alice

        // 修改元素
        list.set(1, "David");

        // 删除元素
        list.remove(0);  // 移除第一个元素

        // 打印列表
        System.out.println("更新后的列表: " + list);
    }
}

2-3、Vector

Vector 类是 ArrayList 的早期实现,与 ArrayList 类似,但它是线程安全的。由于其线程同步的特性,性能相较于 ArrayList 较低,因此不再推荐使用,除非需要多线程环境下的线程安全性。

3、of方法

of 是 Java 9 引入的一个 静态工厂方法,它用于快速创建不可变的集合(如 Set、List、Map 等)。在 List、Set 和 Map 等集合的类中,of 方法使得你可以更方便地初始化集合,而无需手动调用 add 方法或构造函数。

of 方法的使用,特别是在 List 上,允许你以简洁的方式创建一个包含固定元素的列表。

3-1、List.of()方法

List.of() 是 List 接口的一个静态方法,用于创建不可变的列表(即一旦创建,无法修改其内容)。与传统的通过 add() 方法添加元素的方式相比,List.of() 使得初始化 List 更加简洁和直接。

3-2、List.of() 创建不可变列表

可以使用 List.of() 方法来快速创建一个包含元素的不可变列表。这个列表一旦创建后,不能再进行添加、删除或修改操作(即它是 不可变的)。

import java.util.List;

public class ListOfExample {
    public static void main(String[] args) {
        // 使用 List.of() 创建一个包含三个元素的不可变 List
        List<String> list = List.of("Apple", "Banana", "Cherry");

        // 打印列表
        System.out.println(list);  // [Apple, Banana, Cherry]
        
        // 尝试修改列表会抛出 UnsupportedOperationException
        // list.add("Date");  // 会抛出 UnsupportedOperationException
    }
}

3-3、List.of()方法的特点

不可变性:由 List.of() 创建的列表是不可变的。这意味着不能对该列表进行元素的添加、删除或修改等操作。例如,调用 add() 或 remove() 方法会抛出 UnsupportedOperationException 异常。

简洁性:List.of() 提供了简洁的语法来快速初始化一个包含固定元素的列表,而不需要使用 new ArrayList<>() 和 add()。

元素限制:List.of() 最多支持创建包含 10 个元素的列表。如果传入的元素超过 10 个,List.of() 会根据参数自动构造适当大小的列表。

注意:

可以使用 List.of() 创建一个不可变的 List,然后将其复制到一个新的可变列表(如 ArrayList),并对复制的列表进行修改。这种方式利用了 List.of() 创建的不可变列表的简洁性,同时又能保留对新列表的修改能力。

可以通过 new ArrayList<>(List.of(…)) 或 Collections.addAll() 方法来复制一个不可变的 List。这里我们使用 ArrayList 来创建一个新的可变列表,它会复制不可变列表中的所有元素。

import java.util.List;
import java.util.ArrayList;

public class CopyListExample {
    public static void main(String[] args) {
        // 使用 List.of() 创建一个不可变的 List
        List<String> immutableList = List.of("Apple", "Banana", "Cherry");
        
        // 复制到一个可变的 ArrayList
        List<String> mutableList = new ArrayList<>(immutableList);
        
        // 修改可变列表
        mutableList.add("Date");   // 添加元素
        mutableList.set(1, "Grapes");  // 修改索引 1 的元素
        
        // 打印修改后的列表
        System.out.println("原不可变列表: " + immutableList);  // [Apple, Banana, Cherry]
        System.out.println("修改后的可变列表: " + mutableList);  // [Apple, Grapes, Cherry, Date]
    }
}


http://www.kler.cn/a/556023.html

相关文章:

  • org.mortbay.jetty和org.eclipse.jetty的区别
  • 第4章 信息系统架构(五)
  • CNN 卷积神经网络【更新中】
  • Web数据管理复习考点整理
  • PyTorch-基础(CUDA、Dataset、transforms、卷积神经网络、VGG16)
  • 去中心化协作智能生态系统设计
  • 对学习编程语言的一些理解
  • 如何为自己的 PDF 文件添加密码?在线加密 PDF 文件其实更简单
  • 【弹性计算】虚拟化技术
  • Visual studio 2022 将打开文件的方式由单击改为双击
  • python入门 函数
  • Word文档中插入的图片不能完整显示
  • 传输与接入(无线)问答题及答案-2(25题)
  • 【react18】如何使用useReducer和useContext来实现一个todoList功能
  • 低代码与开发框架的一些整合[2]
  • 清影2.0(AI视频生成)技术浅析(四):计算机视觉(CV)
  • ArcGIS Pro挖填方计算指南:全面解析与实施步骤
  • python 3.6.8支持的Django版本是多少?
  • 2025 新版Android Studio创建Java语言项目
  • Python爬虫实战:从零到一构建数据采集系统