我在理解“嵌套”ArrayList 的 size() 输出时遇到问题:
ArrayList<ArrayList<ArrayList<ArrayList<String>>>> myEmpls = new ArrayList<>();
ArrayList<ArrayList<ArrayList<String>>> dummy2 = new ArrayList<>();
ArrayList<ArrayList<String>> dummy = new ArrayList<>();
for (int x = 0; x < 4; x++) {
myEmpls.add(dummy2);
}
System.out.println(myEmpls.size());
// returns 4 as expected
System.out.println(myEmpls.get(0).size());
System.out.println(myEmpls.get(1).size());
// both return 0 as expected
for (int x = 0; x < 10; x++) {
myEmpls.get(0).add(dummy);
}
System.out.println(myEmpls.get(1).size());
// returns 10 altough I added to myEmpls.get(0) and not
// myEmpls.get(1) so I expected this to still be 0.
有人能解释一下为什么会这样吗?也许我遗漏了一些明显的东西。
提前致谢。
最佳答案
您正在将 dummy2
的相同引用添加到 myEmpls
的所有四个位置。因此,当您访问它们中的任何一个时,您访问的对象与具有变量 dummy2
的对象相同,其中实际上有 10 个对象,因为您在其中添加了它。
你甚至可以这样做,它也会返回 10
System.out.println(dummy2.size());
如果你这样做
for (int x = 0; x < 4; x++) {
myEmpls.add(new ArrayList<ArrayList<ArrayList<String>>>());
}
它会像你预期的那样表现
关于Java Arraylist 大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30016091/