Вы должны иметь в виду, что subListвозвращает представление элементов, поэтому, если вы хотите, чтобы остальная часть списка имела право на сборку мусора, вы должны скопировать элементы, которые хотите, в новый List:
Если список короче указанного размера, ожидается исключение за пределами допустимого диапазона . Выберите минимальное значение желаемого размера и текущий размер списка в качестве конечного индекса.
Наконец, обратите внимание, что второй аргумент должен быть на единицу больше, чем последний желаемый индекс.
хотя вопрос не совсем ясен, похоже, что Сэм хочет удалить конец списка. Поэтому ваш ответ должен включать list.clear ().
М.П.
Это вряд ли будет работать так же хорошо, как решение karim79, которое является лучшей альтернативой - оно имеет лучшие шансы на хорошую работу и также является самым чистым кодом.
Лоуренс Дол
Я думаю, это зависит от количества элементов, которые нужно удалить (а также от того, поддерживает ли список модификацию)
Первый вариант изменяет список, а второй - нет. Это должно бытьlist = list.subList(0, 100)
nessa.gp
3
Также обратите внимание, что subList(100, list.size()).clear()будет работать только в том случае, если в списке реализован его метод clear, например, если вы создаете с listпомощью List<String> list = Arrays.asList(someString.split(","));clear (), будет throw, UnsupportedOperationExceptionпоскольку listбудет абстрактным List.
Гюри
Если вы хотите сохранить начальные n элементов списка, то это должно бытьlist.subList(n, list.size()).clear();
Чакладер Асфак Арефе
1
Жаль, что вам нужно создать объект только для того, чтобы сократить список
Дэвид Брэдли,
1
@DavidBradley Верно, но HotSpot может на самом деле оптимизировать это,
Стефан Райх
8
subList, как предлагается в других ответах, первое, что приходит на ум. Я бы также предложил поточный подход .
source.stream().limit(10).collect(Collectors.toList());// truncate to first 10 elements
source.stream().skip(2).limit(5).collect(Collectors.toList());// discards the first 2 elements and takes the next 5
Stream.limit
должно помочь ( docs.oracle.com/javase/8/docs/api/java/util/stream/… )или:
источник
list = list.subList(0, 100)
subList(100, list.size()).clear()
будет работать только в том случае, если в списке реализован его метод clear, например, если вы создаете сlist
помощьюList<String> list = Arrays.asList(someString.split(","));
clear (), будет throw,UnsupportedOperationException
посколькуlist
будет абстрактнымList
.list.subList(n, list.size()).clear();
subList
, как предлагается в других ответах, первое, что приходит на ум. Я бы также предложил поточный подход .источник