Вы можете просто выполнить list.addAll(list);
.
Если вы хотите использовать метод add
в качестве упражнения, вам нужно быть осторожным, чтобы сохранить исходный размер списка, прежде чем начать итерацию.Вы можете сделать это в части инициализации вашего цикла for:
public static void main(String[] args) {
List<Integer> list = new ArrayList<>(Arrays.asList(2, 3, 4, 1, 0));
for (int i = 0, size = list.size(); i < size; i++)
list.add(list.get(i));
System.out.println(list);
assert list.equals(Arrays.asList(2, 3, 4, 1, 0, 2, 3, 4, 1, 0));
}
Теперь вы заметите, что выше используется ArrayList, а не LinkedList.В общем, вы должны предпочесть ArrayList.Даже автор Java LinkedList говорит, что он не использует .См. Также этот вопрос об ArrayList против LinkedList .
Если у вас есть для использования LinkedList, вы можете просто заменить вторую строку из приведенного выше на эту:
List<Integer> list = new LinkedList<>(Arrays.asList(2, 3, 4, 1, 0));
Остальная часть кода может остаться без изменений.Однако, если у вас очень длинный список, то использование метода get(index)
класса LinkedList
может снизить производительность.С LinkedList вы получаете более высокую производительность, если вы выполняете итерацию (используя LinkedList.iterator()
или , улучшенную для цикла , чем при использовании обычного цикла for с вызовами get()
. Но вы не можете выполнять итерацию по списку, покадобавив к нему, вы получите ConcurrentModificationException, вместо этого вы можете скопировать связанный список в массив и выполнить итерацию по нему, добавляя в список:
public static void main(String[] args) {
List<Integer> list = new LinkedList<>(Arrays.asList(2, 3, 4, 1, 0));
for (Integer element : list.toArray(new Integer[0])) {
list.add(element);
}
System.out.println(list);
assert list.equals(Arrays.asList(2, 3, 4, 1, 0, 2, 3, 4, 1, 0));
}