ArrayList.get()返回指针而不是值?

时间:2017-02-20 21:43:52

标签: java arraylist get

ArrayList.get(index)是仅返回索引处元素的值还是指向此元素的指针?我问这个是因为这并没有像我期望的那样执行

List<List<Integer>> myList; 
myList = new ArrayList<>(Collections.nCopies(n, new ArrayList<>()));
           .
           .
           .
List tempList = this.myList.get(x);
tempList.add(i);
this.myList.set(i,tempList);

不是在索引x处向数组添加元素,而是在索引i处存储新列表,而是在两个点附加元素,而不是增加大小的列表,我得到最后一个元素的n倍

1 个答案:

答案 0 :(得分:1)

你正在寻找错误的地方。

这段代码绝对没有错:

List tempList = this.myList.get(x);
tempList.add(i);
this.myList.set(i,tempList);

除了可以缩写为:

List tempList = this.myList.get(x);
tempList.add(i);

(除了您使用的是List,这是一种原始数据类型,这也意味着您没有启用警告,但这是另一个故事。)

你的问题在这里:

myList = new ArrayList<>(Collections.nCopies(n, new ArrayList<>()));

如果您查看Collections.nCopies()的实现,您会看到它在内部使用一个特殊列表,其中包含 只有一个元素 ,您提供的元素它,无论你请求哪个索引,它都会返回给你相同的原始元素。

所以,你没有n列表开头;你只有一个清单。