Есть ли способ создать экземпляр сопоставимого массива, просто установив его длину
Мне нужно "извлечь", если хотите, одну строку из множества массивов сопоставимых объектов. Я знаю индекс строки, мне просто нужна его копия. Я пытался сделать что-то вроде:
masterList - это массив, из которого мне нужно извлечь.
Comparable[] extracted = masterList[i];
Это, однако, только устанавливает извлеченный адрес, а не фактическое содержимое.
Есть простой способ сделать это?
Если нет, могу ли я создать пустой Comparable[] той же длины, что и строка masterList [i], и пройти через него, чтобы добавить к нему? Обратите внимание, что моя программа не запускается, зная длину нужной ей строки, поэтому я не могу жестко запрограммировать ее в программу.
Обновленный код:
Comparable[][] comparable = Arrays.copyOf(masterList, masterList[i].length);
Когда я запустил это, я получил массив нужной длины, но это были все адреса, а не значения. Поэтому я запустил цикл для добавления значений
for(int i = 0; i<comparable.length; ++i){
comparable[i] = queries[masterIndex];
}
это однако все еще возвращает список адресов.
3 ответа
Вы пробовали System.arraycopy?
Comparable extracted[] = new Comparable[masterList[i].length]
System.arraycopy(masterList[i],0, extracted, 0, extracted.length);
Это должно сделать поверхностную копию элементов в masterList[i][j=0 to length-1] в extracted
,
Обратите внимание, что оба решения, описанные здесь, будут генерировать исключение NullPointerException, если master list[i]
бывает null
, Не забудьте проверить это, чтобы избежать неприятного сюрприза во время выполнения.
System.arraycopy
удобно, если вы хотите скопировать часть массива. Вот хорошее обсуждение обоих подходов.
Надеюсь это поможет!
Если нет, могу ли я создать пустой Comparable[] той же длины, что и строка masterList [i], и пройти через него, чтобы добавить к нему?
Незачем. Вы можете просто сделать
Comparable[] extracted = Arrays.copyOf(masterList[i], masterList[i].length);
Обратите внимание, что моя программа не запускается, зная длину нужной ей строки, поэтому я не могу жестко запрограммировать ее в программу.
Видите, вам также не нужно жестко кодировать длину.
Ты можешь использовать clone()
потому что все массивы Cloneable
:
Comparable[] extracted = masterList[i].clone();
Это создаст мелкую копию masterList[i]
(если masterList[i]
является null
, вы получите NullPointerException
).