在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中?一个简单的实现或示例将真正有所帮助。
答案 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