网站开发vs平台的功能,微信商城网站哪家做的好,中国钣金加工网,l5手机网站模板1. 概述
有时在Java中#xff0c;为了方便#xff0c;我们需要创建一个小列表或将数组转换为列表。Java 为此提供了一些辅助方法。
在本文中#xff0c;我们将比较初始化小型临时数组的两种主要方法#xff1a;List.of()和 Array.asList()。
2. Arrays.asList()
Java 自…
1. 概述
有时在Java中为了方便我们需要创建一个小列表或将数组转换为列表。Java 为此提供了一些辅助方法。
在本文中我们将比较初始化小型临时数组的两种主要方法List.of()和 Array.asList()。
2. Arrays.asList()
Java 自1.2版本引入的Arrays.asList()从而简化了List对象的创建该对象是Java Collections Framework的一部分。它可以将数组作为输入的同时并创建所提供数组的List对象。 方法源码
public static T ListT asList(T... a) {return new ArrayList(a);
}说白了就是拿参数直接new了一个对象和自己创建一个数组是一样一样的。 示例
Integer[] array new Integer[]{1, 2, 3, 4,5};
ListInteger list Arrays.asList(array);MatcherAssert.assertThat(匹配项不相等,list, Matchers.containsInAnyOrder(1,2,3,4,5));创建一个简单的整数列表非常容易。
2.1. 返回列表上不支持的操作
asList()方法返回一个固定大小的列表。因此添加和删除新元素都会抛出UnsupportedOperationException。
ListInteger list Arrays.asList(1, 2, 3, 4, 5);
Assert.assertThrows(新增Item,UnsupportedOperationException.class, () - list.add(6));ListInteger list Arrays.asList(1, 2, 3, 4, 5);
Assert.assertThrows(删除Item,UnsupportedOperationException.class, () - list.remove(1));2.2. 使用数组
我们需要注意的是列表不会创建输入数组的副本。相反它使用List接口包装原始数组。因此对数组的更改也会反映在列表上
Integer[] array new Integer[]{1,2,3};
ListInteger list Arrays.asList(array);
array[0] 1000;
MatcherAssert.assertThat(list.get(0)的结果不等于1000,list.get(0),Matchers.equalTo(1000));2.3. 更改返回列表
另外Arrays.asList()返回的列表是可变的。也就是说我们可以更改列表的各个元素
ListInteger list Arrays.asList(1, 2, 3, 4);
list.set(1, 1000);
MatcherAssert.assertThat(list.get(0)的结果不等于1000,list.get(0),Matchers.equalTo(1000));最终这可能会导致不良的副作用从而导致难以发现的错误。当提供数组作为输入时列表上的更改也将反映在数组上
Integer[] array new Integer[]{1, 2, 3};
ListInteger list Arrays.asList(array);
list.set(0,1000);
assertThat(array[0]).isEqualTo(1000);小结使用Arrays.asList()创建的列表可以对内容值进行更改但是不能对列表的长度进行更改。 我们看看另一种创建列表的方法。
3. List.of()
与数组asList()方法相反在Java 9 中引入了一个更方便的新的方法List.of()。它将创建不可修改的List对象的实例
Integer[] array new Integer[]{1, 2, 3, 4,5};ListInteger list List.of(array);MatcherAssert.assertThat(匹配项不相等,list, Matchers.containsInAnyOrder(1,2,3,4,5));
3.1. 与Arrays.asList()的区别
与Arrays.asList()的主要区别在于List.of ()返回一个不可变列表该列表是所提供的输入数组的副本 。因此对原始数组的更改不会反映在返回的列表中
Integer[] array new Integer[]{1, 2, 3, 4, 5};
ListInteger list List.of(array);
array[0] 1000;
MatcherAssert.assertThat(list.get(0)的值不为1,list.get(0),Matchers.equalTo(1));此外我们无法修改列表的元素。如果我们尝试这样做它将抛出UnsupportedOperationException
ListString list List.of(1, 2, 3, 4, 5);
assertThrows(UnsupportedOperationException.class, () - list.set(1, 6));3.2. 空值
我们还应该注意List.of()不允许空值作为输入并且会抛出NullPointerException
assertThrows(NullPointerException.class, () - List.of(1, null, 2));4。结论
Arrays.asList()返回由指定数组支持的固定大小列表。对数组所做的更改将在返回的列表中可见对列表所做的修改将在数组中可见。返回的列表是Serializable的并实现了RandomAccess。 List.of()返回包含任意数量元素的不可修改列表。另外此方法还接受单个数组作为参数。结果列表的元素类型将是数组的组件类型列表的大小将等于数组的长度。要使用作为数组的单个元素创建列表请执行以下操作
String[] array ... ;
ListString[] list List.String[]of(array);这将导致List.ofE方法被调用。