Есть ли способ создать экземпляр сопоставимого массива, просто установив его длину

Мне нужно "извлечь", если хотите, одну строку из множества массивов сопоставимых объектов. Я знаю индекс строки, мне просто нужна его копия. Я пытался сделать что-то вроде:

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).

Другие вопросы по тегам