为什么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

    下一篇: GET data is thrown into page on document load