Заполните массив данными List еще одним элементом - PullRequest
0 голосов
/ 03 мая 2010

По вопросу, который я задал, я выяснил, что для копирования элементов из одного списка в массив мне просто нужно использовать метод toArray () для этого.

Но давайте предположим, что у меня есть список с n объектами. Затем я хочу скопировать в массив размером n + 1 и добавить в первую позицию другой объект, а в других позициях n расположить n данные списка .

Пока я так делаю, но мне просто интересно, есть ли лучший способ сделать это:

    Object array[] = new Object[list.size() + 1];

    Object chk = new Object();

    array[0] = chk;

    for(int i = 1; i < array.length; i++){
        array[i] = list.get(i);
    }

Ответы [ 5 ]

2 голосов
/ 03 мая 2010

использовать итератор:

...

int i = 1;
for(Object item:list){
    array[i] = item;
    i++;
}
2 голосов
/ 03 мая 2010

Вы можете использовать LinkedList и использовать offerFirst (), а затем toArray (), но я сомневаюсь, что это действительно имеет значение.

1 голос
/ 03 мая 2010

Я не понял, что вы пытаетесь достичь с этим, но если я правильно понял проблему, вот как я бы это сделал:

    List<Object> elementList = new ArrayList<Object>();
    Object additionalElement = new Object();
    Object array[] = null;

    //[Add code to populate the List]

    //Add the additional element
    elementList.add(0,additionalElement);

    array = elementList.toArray();

Это даст преимущество с тем, что ничего не будет повторяться.

0 голосов
/ 03 мая 2010

Единственный способ сделать это без вашего цикла:

Object array[] = new Object[list.size() + 1];
Object oldValues[] = list.toArray();

Object chk = new Object();
array[0] = chk;
System.arrayCopy(oldValues, 0, array, 1, oldValues.length);

System.arrayCopy немного быстрее, чем зацикливание (не слишком много, но тем не менее, быстрее), хотя повышение производительности, вероятно, будет уменьшено toArray, в зависимости от реализации вашего Списка.

В целом, у вас есть достойный подход, если List.get(int) является приемлемой стоимостью. (Если это O (n), вы получите O (n ^ 2) для вашей операции, что является неоптимальным, когда решение Фрэнка O (n).)

0 голосов
/ 03 мая 2010

Если вы ищете способ избежать обхода массива и списка, я думаю, вам не повезло. Java не предоставляет способа делать массовые копии, за исключением тех, которые просто используют вызов API, который выполняет циклический просмотр коллекции за кулисами, скрытой от глаз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...