Backed Collections如何在Java中工作?

时间:2014-11-14 17:56:58

标签: java arrays list

在Java中,我有以下数组'integerArray'并向其添加2个整数。

Integer[] integerArray = new Integer[3];
integerArray[0] = 1;
integerArray[1] = 2;

现在我从数组中创建一个列表。

List<Integer> integerList = Arrays.asList(integerArray);

此时,'integerList'包含1和2。

现在我向数组添加另一个元素。

integerArray[2] = 3;

此时,如果我们检查integerList,我们会看到它包含1,2,3;

使用什么机制,以便对数组的任何更改也反映在List中?一个简单的实现或示例将真正有所帮助。

3 个答案:

答案 0 :(得分:4)

  

返回由指定数组

支持的固定大小列表

这意味着返回的列表对象(实际上是ArrayList)对数组有引用,而不是 copy 。由于它具有对此数组的引用,因此对它的任何更改都将反映在列表中。

方法Arrays.asList只调用ArrayList的构造函数,其定义如下:

ArrayList (E[] array) {
    if (array == null)
        throw new NullPointerException();
    a = array;
}

因此字段a将存储对初始数组的引用。

答案 1 :(得分:4)

这是因为它是相同的变量但用作列表。如果您阅读Arrays.asList()

的Javadoc

明确说明

  

返回由指定数组支持的固定大小的列表。 (对返回列表的更改“直写”到数组。)此方法与Collection.toArray()结合,充当基于数组的API和基于集合的API之间的桥梁。返回的列表是可序列化的,并实现RandomAccess。

答案 2 :(得分:2)

Arrays.asList是一个静态/实用程序方法,它调用构造函数来创建一个新的ArrayList。 ArrayList由Array支持。在许多编程语言中就是这种情况,其中高级数据结构仅由原始数组支持。您可以在此处查看源代码Arrays.asList