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倍
答案 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
列表开头;你只有一个清单。