//I want my to be something like this: [[0,0],[0,1],[0,2].....,[4,2],[4,3]]
public class Japan {
public static void main(String[]args) {
ArrayList<ArrayList<Integer>> nodes = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> nodeList = new ArrayList<Integer>();
for(int i =0;i<5;i++) {
for(int j=0;j<4;j++) {
nodeList.add(i);
nodeList.add(j);
nodes.add(nodeList);
nodeList.remove(1);
nodeList.remove(0);
}
}
System.out.println(nodes);
}}
答案 0 :(得分:0)
您需要确保为每个i
索引初始化列表
for(int i = 0; i < 5; i++){
list.add(new ArrayList<Object>());
}
然后执行以下操作:
for(int i = 0; i <5; i++){
for(int j = 0; j < 4; j++){
list.get(i).add(j);
}
}
答案 1 :(得分:0)
您的问题是因为您正在重复使用相同的内部ArrayList - 您将内部ArrayList多次添加到外部ArrayList,并且添加到内部ArrayList的所有内容都将被删除,因此当您打印它时,内部列表是空。
nodes.add(nodeList)
不复制nodeList
- 它会添加对同一列表的引用。
您需要在致电nodes.add
时创建副本:
public class Japan {
public static void main(String[]args) {
ArrayList<ArrayList<Integer>> nodes = new ArrayList<ArrayList<Integer>>();
ArrayList<Integer> nodeList = new ArrayList<Integer>();
for(int i =0;i<5;i++) {
for(int j=0;j<4;j++) {
nodeList.add(i);
nodeList.add(j);
nodes.add(new ArrayList<>(nodeList)); // This copies nodeList, and adds the copy to nodes
nodeList.remove(1);
nodeList.remove(0);
}
}
System.out.println(nodes);
}}
或每次循环创建一个新的内部列表:
public class Japan {
public static void main(String[]args) {
ArrayList<ArrayList<Integer>> nodes = new ArrayList<ArrayList<Integer>>();
for(int i =0;i<5;i++) {
for(int j=0;j<4;j++) {
ArrayList<Integer> nodeList = new ArrayList<Integer>(); // this creates a new list each time it is executed
nodeList.add(i);
nodeList.add(j);
nodes.add(nodeList);
}
}
System.out.println(nodes);
}}
这两个都可行,但我(可能是大多数程序员)发现第二个更容易理解,所以我更喜欢这种方法。 (如果你看不到为什么第二个更容易理解,它会及时来到你身边)