钜形不锈钢水箱 发表于 2026-2-11 03:03:46

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

Arrays.asList() 是 Java 中的一个静态方法,它属于 java.util.Arrays 类。这个方法的紧张作用是将一个数组转换成一个固定巨细的列表(List),但这个列表是由原数组支持的,也就是说,列表黑白同步的,而且其巨细是固定的,由于列表的巨细是由原数组的巨细决定的,不支持通过 add() 或 remove() 方法来改变列表的巨细。
利用方法


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());
    }
}注意事项


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


[*]        将数组转达给须要聚集参数的方法:
        当你有一个数组,但须要将其转达给一个渴望吸取 List 或其他聚集范例参数的方法时,Arrays.asList() 可以非常方便地将数组转换为一个列表。
[*]        简化聚集初始化:
        当你须要快速初始化一个只包罗少量元素的聚集时,利用 Arrays.asList() 可以比逐个添加元素到聚集中更简便。
[*]        作为循环或迭代的数据源:
        在须要利用数组元素举行迭代,但又想利用聚集的迭代器或加强型 for 循环(也称为 "for-each" 循环)时,Arrays.asList() 提供了便利。
[*]        与聚集框架的其他部门共同利用:
Arrays.asList() 返回的列表可以与聚集框架中的其他类(如 Collections 类的工具方法)一起利用,以实验如排序、搜索或过滤等操纵。
[*]        作为不可变列表的源:
        由于 Arrays.asList() 返回的列表是固定巨细的,而且其修改操纵(除了 set(),假如列表支持的话)会抛出 UnsupportedOperationException,因此它可以作为不可变列表的源,用于须要不可变聚集的场景。
[*]        在泛型代码中利用:
        在泛型编程中,当你须要明白指定聚集中元素的范例时,Arrays.asList() 提供了范例安全的方式来从数组创建列表。



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!qidao123.com:ToB企服之家,中国第一个企服评测及软件市场,开放入驻,技术点评得现金
页: [1]
查看完整版本: 一天一个Arrays小知识——Arrays.asList()