Java - 转换ArrayList< int []>到int [] []

时间:2013-10-08 22:20:59

标签: java arrays arraylist integer

我有一个ArrayList< int []>并希望将其转换为int [] []。结果数组对于每个条目都具有相同的int [],即使它们是不同的(是的,我已经检查过了!)。我错过了一些简单的东西吗? int [] []中数组的长度由arr.length

给出
int[][] vals = new int[ list.size() ][ arr.length ];
list.toArray( vals );

修改 我已经意识到代码工作正常,因此有更多的代码示例出现了问题。 permute()按照它的说法进行操作并置换给定数组中的整数,当完成新的排列时返回true。

List< int[] > list = new ArrayList<>();
do {
    list.add( vals );
} while ( permute( vals ) ); // I print vals here and the permutations are all unique each time
int[][] permutations = new int[ list.size() ][];
list.toArray( permutations );
// If I print permutations now, all the arrays inside it are the same

3 个答案:

答案 0 :(得分:2)

int[][] vals = new int[ list.size() ][ arr.length ];

for(int i = 0; i < list.size(); i++) {
   vals[i] = list.get(i);
}

答案 1 :(得分:2)

回答新问题:您没有显示vals的声明,但假设声明为int[]vals实际上是参考到一个数组。因此,每次执行list.add时,都会将相同的引用添加到列表中。我假设permute(vals)更改了列表中的值,但它不会更改引用,这意味着在循环结束时,list中的每个项都是对同一个数组的相同引用相同的价值观。你需要做的是复制数组。试试这个:

list.add( Arrays.copyOf (vals, vals.length) );

答案 2 :(得分:0)

仔细阅读文档http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#toArray%28%29

你需要

vals = list.toArray(vals);

我不知道为什么它对你们中的某些人不起作用 - 它对我很有用