我有一个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
答案 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);
我不知道为什么它对你们中的某些人不起作用 - 它对我很有用