arraylist没有按预期工作

whi*_*rue 2 java arraylist

我有2个arraylist

 ArrayList<List<Integer>> main = new ArrayList<>();    
 ArrayList<Integer> sub=new ArrayList<>();

    sub.add(1);
    sub.add(2);
    main.add(sub);
    sub.clear();

    sub.add(5);
    sub.add(6);
    sub.add(7);
    main.add(sub);
Run Code Online (Sandbox Code Playgroud)

现在我希望主要是

what i expect main-->[[1,2],[5,6,7]] ;
but really    main-->[[567],[567]];
Run Code Online (Sandbox Code Playgroud)

我认为子阵列共享参考..所以我该怎么做

main as [[1,2],[5,6,7]
Run Code Online (Sandbox Code Playgroud)

我无法创建sub1,sub2,...因为实际上我在巨大的循环内执行此操作

Kry*_*ton 6

您正在修改列表并再次添加它,这就是[567]出现两次的原因.我建议您更改代码如下:

ArrayList<List<Integer>> main = new ArrayList<>();    
ArrayList<Integer> sub = new ArrayList<>();

sub.add(1);
sub.add(2);
main.add(sub);

sub = new ArrayList<>();
sub.add(5);
sub.add(6);
sub.add(7);
main.add(sub);
Run Code Online (Sandbox Code Playgroud)