Java如何将数组转换为列表

arrays.aslist()方法可用于返回包含给定数组的元素的固定大小列表。
结果列表将与数组的基本类型相同的参数类型。

String[] stringArray = {"foo", "bar", "baz"};
List stringList = Arrays.asList(stringArray);

注意:此列表由原始数组(视图)备份,这意味着列表的任何更改都将更改数组,反之亦然。
但是,对将更改其大小(并且因此数组长度)的列表的更改将抛出异常。

要创建列表的副本,请使用java.util.ArrayList的构造函数作为参数占用:

//版本 ≥ Java SE 5
String[] stringArray = {"foo", "bar", "baz"};
List stringList = new ArrayList(Arrays.asList(stringArray));
//版本 ≥ Java SE 7

在Java SE 7及更高版本中,可以使用一对角括号(空组型参数),称为钻石符号(<>)。
编译器可以从上下文中确定类型参数。
这意味着在调用数组列表的构造函数时可以遗漏信息类型,并且它将在编译期间自动推断。
这被称为类型推断,它是Java泛型的一部分。

//Using Arrays.asList()
String[] stringArray = {"foo", "bar", "baz"};
List stringList = new ArrayList<>(Arrays.asList(stringArray));
//Using ArrayList.addAll()
String[] stringArray = {"foo", "bar", "baz"};
ArrayList list = new ArrayList<>();
list.addAll(Arrays.asList(stringArray));
//Using Collections.addAll()
String[] stringArray = {"foo", "bar", "baz"};
ArrayList list = new ArrayList<>();
Collections.addAll(list, stringArray);

值得注意的是钻石符号(<>)不能与匿名类一起使用。

Version ≥ Java SE 8
//Using Streams
int[] ints = {1, 2, 3};
List list = Arrays.stream(ints).boxed().collect(Collectors.toList());
String[] stringArray = {"foo", "bar", "baz"};
List

使用arrays.aslist()方法的重要说明

  • 此方法返回列表,该列表是数组$arraylist(静态内部类别的数组)而不是java.util.arraylist的实例。生成的列表是固定大小的。不支持该含义,添加或者删除元素,并将抛出一个UnsupportedOperationException:
stringList.add("something"); //throws java.lang.UnsupportedOperationException
  • 可以通过将数组备份列表传递给新列表的构造函数来创建一个新列表。这将创建具有可变大小的数据的新副本,并且未由原始数组备份:
List modifiableList = new ArrayList<>(Arrays.asList("foo", "bar"));
  • 在原始数组上调用列表列表(t ... a),例如int [],将生成一个列表,其唯一元素是源原语数组而不是源数组的实际元素。

此行为的原因是无法使用原始类型来代替通用类型参数,因此整个基本数组在这种情况下替换了通用类型参数。
为了转换原始
数组到列表,首先,将基本数组转换为相应包装类型的数组(即call arrays.aslist在整数[]而不是int [])。

因此,这将打印错误:

int[] arr = {1, 2, 3}; //primitive array of int
System.out.println(Arrays.asList(arr).contains(1));

另一方面,这将打印true:

Integer[] arr = {1, 2, 3}; //object array of Integer (wrapper for int)
System.out.println(Arrays.asList(arr).contains(1));

这也将为true,因为数组将被解释为整数[]):

System.out.println(Arrays.asList(1,2,3).contains(1));
日期:2020-06-02 22:15:16 来源:oir作者:oir