Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java数组列表大小_Java_Arraylist_Size - Fatal编程技术网

Java数组列表大小

Java数组列表大小,java,arraylist,size,Java,Arraylist,Size,我在理解“嵌套”ArrayList的size()输出时遇到问题: ArrayList<ArrayList<ArrayList<ArrayList<String>>>> myEmpls = new ArrayList<>(); ArrayList<ArrayList<ArrayList<String>>> dummy2 = new ArrayList<>(); ArrayList<Ar

我在理解“嵌套”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.
ArrayList myEmpls=new ArrayList();
ArrayList dummy2=新的ArrayList();
ArrayList dummy=新的ArrayList();
对于(int x=0;x<4;x++){
myEmpls.add(dummy2);
}
System.out.println(myEmpls.size());
//按预期返回4
System.out.println(myEmpls.get(0.size());
System.out.println(myEmpls.get(1.size());
//两者都按预期返回0
对于(int x=0;x<10;x++){
myEmpls.get(0).add(dummy);
}
System.out.println(myEmpls.get(1.size());
//返回10 altough我添加到myEmpls.get(0)而不是
//得到(1),所以我希望它仍然是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>>>());
}
for(int x=0;x<4;x++){
添加(新的ArrayList());
}

它的行为将与您预期的一样

您正在将相同的
dummy2
引用添加到
myEmpls
的所有四个位置。因此,当您访问它们中的任何一个时,您访问的对象与变量
dummy2
相同,因为您在其中添加了10个对象

你甚至可以这样做,它也会返回10

System.out.println(dummy2.size());

如果你这样做

for (int x = 0; x < 4; x++) {
    myEmpls.add(new ArrayList<ArrayList<ArrayList<String>>>());
}
for(int x=0;x<4;x++){
添加(新的ArrayList());
}
它将按照您的预期运行

myEmpls.add(dummy2)
多次将相同的
ArrayList
实例添加到
myEmpls

因此,调用
myEmpls.get(0).add(dummy)
会将元素添加到
myEmpls.get(1)
引用的同一
ArrayList
实例中。因此
myEmpls.get(1)
size()
是10,因为
myEmpls(0)=myEmpls(1)

如果将第一个循环更改为:

for (int x = 0; x < 4; x++) {
    dummy2 = new ArrayList<>();
    myEmpls.add(dummy2);
}
for(int x=0;x<4;x++){
dummy2=新的ArrayList();
myEmpls.add(dummy2);
}
myEmpls
的每个元素都将是不同的,
myEmpls.get(1).size()
将按预期返回0。

myEmpls.add(dummy2)
多次将相同的
ArrayList
实例添加到
myEmpls

因此,调用
myEmpls.get(0).add(dummy)
会将元素添加到
myEmpls.get(1)
引用的同一
ArrayList
实例中。因此
myEmpls.get(1)
size()
是10,因为
myEmpls(0)=myEmpls(1)

如果将第一个循环更改为:

for (int x = 0; x < 4; x++) {
    dummy2 = new ArrayList<>();
    myEmpls.add(dummy2);
}
for(int x=0;x<4;x++){
dummy2=新的ArrayList();
myEmpls.add(dummy2);
}

myEmpls
的每个元素都将是不同的,
myEmpls.get(1).size()
将按预期返回0。

原因是您创建了一个ArrayList对象(
dummy2
),然后将该确切对象添加到列表中4次。因此,当您从
myEmpls.get(0)
向对象添加到
dummy
时,您也在向其他3个索引添加dummy,因为它们都是相同的对象。因此,尺寸为10。myEmpls中的每个索引都指向内存中完全相同的地址,因此无论您对其中一个索引执行什么操作,都会对其他所有索引执行任何操作。

原因是您创建了一个ArrayList对象(
dummy2
),然后将该对象添加到列表中4次。因此,当您从
myEmpls.get(0)
向对象添加到
dummy
时,您也在向其他3个索引添加dummy,因为它们都是相同的对象。因此,尺寸为10。myEmpls中的每个索引都指向内存中完全相同的地址,因此无论您对其中一个索引执行什么操作,都会对其他所有索引执行任何操作。

列表保留添加到其中的
对象的引用,而
对象的状态更改将反映到您案例中添加到列表中的所有引用

例如:


列表保留添加在其中的
对象
的引用,
对象
状态的更改反映到您案例中添加在列表中的所有引用

例如:


所有的Dummy2不是都一样吗?谢谢所有的答案,我以前确实遇到过同样的问题,但是因为我已经有一段时间没有编码了,所以我没有意识到它!所有的Dummy2不是都一样吗?谢谢所有的答案,我以前确实遇到过同样的问题,但是因为我已经有一段时间没有编码了,所以我没有意识到它!