如果想法是基于ID_list 中的索引存储重新组织data。迭代这个数组。
double[][] new_data = new double[ID_list.length][];
for(int i = 0; i < ID_list.length; ++i){
new_data[i] = data[ID_list[i]];
}
这只会复制数组的引用,而不是值本身,因此不会使内存使用量翻倍。
注意:我使用 ID_list 长度来初始化数组,如果你只需要一些列会更好。
编辑:
这里有一个例子来说明二维数组只是一个数组的数组。
int[][] original = {
{1,2,3},
{4,5,6}
};
int[][] copy = new int[1][];
copy[0] = original[0];
System.out.println(original[0]);
System.out.println(copy[0]);
System.out.println(Arrays.toString(original[0]));
System.out.println(Arrays.toString(copy[0]));
original[0][1] = 7;
System.out.println(Arrays.toString(original[0]));
System.out.println(Arrays.toString(copy[0]));
会输出
[I@3941a79c //change on each run
[I@3941a79c
[1, 2, 3] //original[0]
[1, 2, 3] //copy[0]
[1, 7, 3] //original[0] after the update
[1, 7, 3] //copy[0]
这是关于 Arrays member 的 JSL。这可能会很有趣。