一天一个Arrays小知识——Arrays.asList()

Arrays.asList() 是 Java 中的一个静态方法,它属于 java.util.Arrays 类。这个方法的主要作用是将一个数组转换成一个固定大小的列表(List),但这个列表是由原数组支持的,也就是说,列表是非同步的,并且其大小是固定的,因为列表的大小是由原数组的大小决定的,不支持通过 add()remove() 方法来改变列表的大小

使用方法

java 复制代码
import java.util.Arrays;  
import java.util.List;  
  
public class Main {  
    public static void main(String[] args) {  
        // 创建一个数组  
        Integer[] numbers = {1, 2, 3, 4, 5};  
          
        // 使用 Arrays.asList() 将数组转换为列表  
        List<Integer> list = Arrays.asList(numbers);  
          
        // 遍历列表  
        for (Integer number : list) {  
            System.out.println(number);  
        }  
          
        // 注意:下面的代码会抛出 ConcurrentModificationException,因为返回的列表大小是固定的  
        // list.add(6); // 尝试添加元素会抛出异常  
          
        // 另一个常见的错误是尝试传递基本类型数组给 Arrays.asList()  
        // int[] basicNumbers = {1, 2, 3};  
        // List<Integer> basicList = Arrays.asList(basicNumbers); // 这不会按预期工作  
        // 因为 Arrays.asList() 会将 basicNumbers 数组本身作为列表的唯一元素  
          
        // 正确的做法是使用包装类型数组  
        Integer[] boxedNumbers = {1, 2, 3};  
        List<Integer> boxedList = Arrays.asList(boxedNumbers);  
          
        // 或者使用 Stream API 转换基本类型数组  
        int[] basicArray = {1, 2, 3};  
        List<Integer> streamList = Arrays.stream(basicArray).boxed().collect(Collectors.toList());  
    }  
}

注意事项

  1. 不可变大小 :返回的列表大小固定,不支持通过 add()remove() 方法修改。
  2. 类型安全Arrays.asList() 泛型参数必须是对象类型数组(如 Integer[]),如果传入基本类型数组(如 int[]),则整个数组会被视为列表中的单个元素。
  3. 性能 :由于返回的列表是由原数组支持的,因此在性能上,访问列表元素(通过索引或迭代器)通常比访问原始数组要快,但修改列表(尽管不支持)或将其转换为新的列表(如使用 new ArrayList<>(Arrays.asList(array)))会涉及到额外的内存分配和可能的复制操作。
  4. 同步性:返回的列表不是同步的,如果需要在多线程环境下使用,请自行同步访问。

使用时机

  1. 将数组传递给需要集合参数的方法

    当你有一个数组,但需要将其传递给一个期望接收 List 或其他集合类型参数的方法时,Arrays.asList() 可以非常方便地将数组转换为一个列表。

  2. 简化集合初始化

    当你需要快速初始化一个只包含少量元素的集合时,使用 Arrays.asList() 可以比逐个添加元素到集合中更简洁。

  3. 作为循环或迭代的数据源

    在需要使用数组元素进行迭代,但又想利用集合的迭代器或增强型 for 循环(也称为 "for-each" 循环)时,Arrays.asList() 提供了便利。

  4. 与集合框架的其他部分配合使用
    Arrays.asList() 返回的列表可以与集合框架中的其他类(如 Collections 类的工具方法)一起使用,以执行如排序、搜索或过滤等操作。

  5. 作为不可变列表的源

    由于 Arrays.asList() 返回的列表是固定大小的,并且其修改操作(除了 set(),如果列表支持的话)会抛出 UnsupportedOperationException,因此它可以作为不可变列表的源,用于需要不可变集合的场景。

  6. 在泛型代码中使用

    在泛型编程中,当你需要明确指定集合中元素的类型时,Arrays.asList() 提供了类型安全的方式来从数组创建列表。

相关推荐
mubeibeinv几秒前
项目搭建+图片(添加+图片)
java·服务器·前端
青莳吖2 分钟前
Java通过Map实现与SQL中的group by相同的逻辑
java·开发语言·sql
Buleall9 分钟前
期末考学C
java·开发语言
重生之绝世牛码11 分钟前
Java设计模式 —— 【结构型模式】外观模式详解
java·大数据·开发语言·设计模式·设计原则·外观模式
小蜗牛慢慢爬行17 分钟前
有关异步场景的 10 大 Spring Boot 面试问题
java·开发语言·网络·spring boot·后端·spring·面试
Algorithm157627 分钟前
云原生相关的 Go 语言工程师技术路线(含博客网址导航)
开发语言·云原生·golang
shinelord明36 分钟前
【再谈设计模式】享元模式~对象共享的优化妙手
开发语言·数据结构·算法·设计模式·软件工程
新手小袁_J42 分钟前
JDK11下载安装和配置超详细过程
java·spring cloud·jdk·maven·mybatis·jdk11
呆呆小雅42 分钟前
C#关键字volatile
java·redis·c#
Monly2143 分钟前
Java(若依):修改Tomcat的版本
java·开发语言·tomcat