网站空间多少钱,昆山市建设局网站,百度竞价推广是什么工作,做网站的国标有哪些Arrays.asList() 和 Collections.singletonList()
概述
List 是我们使用Java时常用的集合类型。众所周知#xff0c;我们可以轻松地在一行中初始化列表。例如#xff0c;当我们想要初始化一个只有一个元素的List时#xff0c;我们可以使用Arrays.asList#xff08;#…Arrays.asList() 和 Collections.singletonList()
概述
List 是我们使用Java时常用的集合类型。众所周知我们可以轻松地在一行中初始化列表。例如当我们想要初始化一个只有一个元素的List时我们可以使用Arrays.asList方法或 Collections.singletonList方法。在本教程中我们将讨论这两种方法之间的差异。然后为简单起见我们将使用单元测试断言来验证某些操作的行为是否符合预期。
Arrays.asList()方法 首先Arrays.asList方法返回一个固定大小的列表。 任何结构更改都将引发UnsupportedOperationException例如向列表中添加新元素或从列表中删除元素。现在让我们通过测试来检查它 ListString arraysAsList Arrays.asList(ONE);
assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(() - arraysAsList.add(TWO)
);如果我们试一试测试就会通过。在上面的代码中我们使用Assertj 的异常断言来验证当我们尝试向列表中添加新元素时是否抛出UnsupportedOperationException。 即使我们不能在列表中调用add 或remove操作我们也可以使用set 方法更改列表中的元素 arraysAsList.set(0, A brand new string);
assertThat(arraysAsList.get(0)).isEqualTo(A brand new string);这一次我们使用新的String对象设置列表中的元素。如果我们执行测试它就会通过。 最后让我们讨论Arrays.asList 方法的数组和返回的列表之间的关系。 正如方法名称所暗示的那样此方法使数组用作列表。让我们了解“使数组作为列表工作”是什么意思。 Arrays.asList 方法返回一个List对象该对象由给定数组支持。也就是说该方法不会将元素从数组复制到新的List对象。相反该方法在给定数组上提供列表视图。因此我们对数组所做的任何更改都将在返回的列表中可见。同样对列表所做的更改也将在数组中可见 String[] theArray new String[] { ONE, TWO };
ListString theList Arrays.asList(theArray);
//changing the list, the array is changed too
theList.set(0, ONE [changed in list]);
assertThat(theArray[0]).isEqualTo(ONE [changed in list]);
//changing the array, the list is changed too
theArray[1] TWO [changed in array];
assertThat(theList.get(1)).isEqualTo(TWO [changed in array]);测试通过。因此对于数组和返回的列表如果我们在一侧进行了一些更改则另一侧也会更改。
Collections.singletonList()方法 首先singletonList 方法返回的列表只有一个元素。与Arrays.asList 方法不同*singletonList* 返回一个不可变的列表。 换句话说不允许在singletonList 返回的列表上进行结构性和非结构性更改。测试可以快速说明这一点 ListString singletonList Collections.singletonList(ONE);
assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(() - singletonList.add(TWO)
);
assertThatExceptionOfType(UnsupportedOperationException.class).isThrownBy(() - singletonList.set(0, A brand new string)
);如果我们运行测试它就会通过。因此无论我们是向列表中添加元素还是更改列表中的元素它都会抛出UnsupportedOperationException。 值得一提的是如果我们看一下返回的列表类的源代码与其他List实现不同返回列表中的单个元素不存储在数组或任何其他复杂的数据结构中。相反列表直接保存元素对象 private static class SingletonListE extends AbstractListE implements RandomAccess, Serializable {...private final E element;SingletonList(E obj) {element obj;}...
}因此它将占用更少的内存。
简短总结
最后让我们在一个表中总结*Arrays.asList 方法和 Collections.singletonList*方法的特征以获得更好的概述
结论
在这篇快速文章中我们讨论了Arrays.asList 方法和 Collections.singletonList方法。当我们想初始化一个只有一个元素的固定大小的列表时我们可以考虑使用Collections.singletonList 方法。但是如果需要更改返回列表中的元素我们可以选择Arrays.asList 方法。