为什么Arrays.asList()返回自己的ArrayList实现
我最近发现在Java中实际上有2个不同的ArrayList
实现(比我猜想的晚得多)。
所以我想知道为什么Arrays.asList(T... a)
需要返回一个无法调整大小的列表? 如果他们需要一个不可修改的列表,为什么要添加set(int index, E element)
方法呢?
所以我的一般问题是为什么不从Arrays.asList(T... a)
方法返回java.util.ArrayList
?
你也可以从java.util.Arrays.ArrayList
实现中获得什么?
你问:
你也可以从java.util.Arrays.ArrayList实现中获得什么?
这是因为Arrays.asList返回的Arrays $ ArrayList只是原始数组的视图。 所以当原始数组被改变时,视图也被改变。
如果使用真正的ArrayList,那么这些元素将被复制,并且对orignal数组的更改不会影响ArrayList。
做这件事的原因很简单:
javadoc说asList
返回“由指定数组支持的固定大小列表”。 如果要调整数组大小,则必须创建一个新数组并复制旧数据。 比列表不会被相同的数组实例支持。 陈述的目标是“这种方法在基于阵列和基于集合的API之间充当桥梁”。 因此对底层阵列的直写是设计要求。
Arrays.asList需要返回一个无法调整大小的列表 - 因为底层数组无法调整大小 - 但是可以修改 - 因为可以对底层数组中的元素进行赋值。
链接地址: http://www.djcxy.com/p/17621.html上一篇: Why does Arrays.asList() return its own ArrayList implementation