Java嵌套ArrayList未正确添加
我一直在尝试嵌套的arrayList方法。我有个问题Java嵌套ArrayList未正确添加,java,Java,我一直在尝试嵌套的arrayList方法。我有个问题 public static void main(String[] args) { List<List<Integer>> list = new ArrayList<>(); List<Integer> subList = new ArrayList<Integer>(){{ add(1); add(2); }}; lis
public static void main(String[] args) {
List<List<Integer>> list = new ArrayList<>();
List<Integer> subList = new ArrayList<Integer>(){{
add(1);
add(2);
}};
list.add(subList);
subList.clear();
subList.add(3);
subList.add(4);
list.add(subList);
System.out.println(list);
}
而不是[[1,2],[3,4]]
我的代码有什么问题
编辑:我还有一些关于代码的问题。我应该创建一个新的quetsion还是将它添加到这里。我建议您不要使用双括号初始化
newarraylist{{}
,因为它是一种反模式,也会创建匿名内部类
对于错误,您应该初始化一个新列表,而不是clear()
publicstaticvoidmain(字符串[]args){
列表=新的ArrayList();
列表子列表=新的ArrayList();
子列表。添加(1);
子列表。添加(2);
列表。添加(子列表);
subList=新的ArrayList();
子列表。添加(3);
子列表。添加(4);
列表。添加(子列表);
系统输出打印项次(列表);
}
调用clear不会更改对ArrayList的引用,而是指向同一对象。您应该通过调用subList=new ArrayList()
关于双大括号初始化的不良影响的一本好书
编辑:正如@NoDataFound所建议的,如果您使用的是Java8+,那么创建列表的过程可以简化得多
如果您使用的是Java8,那么可以使用
List<Integer> subList = Arrays.asList(1, 2);
List subList=Arrays.asList(1,2);
如果您使用的是Java9+,那么可以使用
List<Integer> subList = List.of(1, 2);
List subList=List.of(1,2);
请添加正确的标记。您只是将子列表的引用添加到列表中。您需要创建一个新的子列表,而不是清除旧的子列表。您所创建的:list=[sublist,sublist]
请注意,您只有一个子列表,其中有两个引用。我非常同意双括号方法。使用它的人通常不理解它真正的含义,因为真正理解它真正含义的人通常避免使用它。这是一件令人憎恶的事。当然,关于OP问题的本质,你也是对的。你应该补充一点,调用newarraylist+add
可以完全被数组取代。asList(1,2)
和数组。asList(3,4)
,或者在Java 9++中,List.of(1,2)
和List.of(3,4)
。是@JohnBollinger。这就是为什么我认为我也应该添加这一点,尽管这似乎与实际问题无关。@nodata发现这是真的。将添加.tysm@BlackPearl。。!
List<Integer> subList = Arrays.asList(1, 2);
List<Integer> subList = List.of(1, 2);