/**
* Clones the provided array
*
* @param src
* @return a new clone of the provided array
*/
public static int[][] cloneArray(int[][] src) {
int length = src.length;
int[][] target = new int[length][src[0].length];
for (int i = 0; i < length; i++) {
System.arraycopy(src[i], 0, target[i], 0, src[i].length);
}
return target;
}
Можно ли изменить этот код для поддержки n-мерных массивов объектов ?
Вам нужно будет поддерживать произвольные длины массивов и проверять, имеют ли src и destination одинаковые размеры, , и вам также нужно будет копировать каждый элемент каждого массива рекурсивно , в случае, если Объект был также массивом.
Прошло много времени с тех пор, как я это опубликовал, но я нашел хороший пример одного способа создания класса n-мерного массива. Класс принимает ноль или более целых чисел в конструкторе, определяя соответствующий размер каждого измерения. Класс использует базовый flat array Object[]
и вычисляет индекс каждого элемента, используя измерения и массив множителей. (Вот как создаются массивы на языке программирования C.)
Копировать экземпляр NDimensionalArray
так же просто, как копировать любой другой 2D-массив, хотя вы должны утверждать, что каждый объект NDimensionalArray
имеет одинаковые размеры. Это, вероятно, самый простой способ сделать это, поскольку нет рекурсии, и это значительно упрощает представление и доступ.