Матрица объектов из строк в матрицу строк в Java - PullRequest
0 голосов
/ 13 июля 2011

Я новичок в программировании на Java и в матрице объектов, которую я могу легко привести, используя два цикла for таким образом

String[][] data = new String[objData.length][objData[0].length];
for (int nRow = 0; nRow < objData.length; nRow++){
    for (int nCol = 0; nCol < objData[0].length; nCol++){
    data[nRow][nCol] = (String) objData[nRow][nCol];
    }
}

Мне было интересно, можно ли его запрограммировать лучше. Я пытался использовать Arrays.copyOf или что-то подобное, как это

String[][] data = Arrays.copyOf(objData, objData.length*objData[0].length, String[][].class);

но это дает мне исключение ...

at java.util.Arrays.copyOf (Неизвестный источник)

Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 13 июля 2011

Единственный способ скопировать массивы, который более эффективен, чем для циклического кодирования for (), - это System.arraycopy (). Он работает с использованием низкоуровневого вызова - что-то вроде memcopy в C. Он должен работать для вас, если вы передадите правильные аргументы.

Но я бы хотел вам кое-что порекомендовать. Не создавайте столь трудных для понимания структур. Я, вероятно, создал 2-мерный массив в Java 2 или 3 раза за последние 12 лет. Если ваши данные сложны, создайте класс, который содержит эти данные, а затем создайте коллекцию или массив, который содержит элементы этого класса.

0 голосов
/ 13 июля 2011

Если исходный и целевой массив имеют разные типы, то ваш код - правильный подход: создайте новый целевой массив, затем скопируйте и преобразуйте все элементы из исходного массива в целевые ячейки.

Другие методы (например, Array.copyof()) будут делать то же самое, возможно, немного быстрее, потому что их подпрограммы могут быть реализованы в собственном коде. Но сложность составляет O(m*n) во всех случаях.

Чтобы привести в порядок код: переместите алгоритм в статический вспомогательный метод в некоторый служебный класс, например

 public static String[][] convertToStringMatrix(Object[][] source) { ... }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...