提问人:Markus 提问时间:10/26/2023 最后编辑:khelwoodMarkus 更新时间:10/27/2023 访问量:104
Java List 有一个方法可以在一个位置添加多个元素,但我找不到删除一个位置的多个元素的方法
Java List has a method to add multiple elements at a position, but I can't find a method to remove multiple elements at a position
问:
有,但我找不到相应的,无论措辞和方式如何指定。在 中,有 ,但不在 中。List.addAll(position, collection)
List.<remove>(position, <range>)
ArrayList
removeRange(position, positionAfter)
List
在许多列表类型中,从列表中删除间隔可以是 O(1),逐个删除元素将是 O(n) 并错过该功能。将一般转换为支持范围删除的类型也将是 O(n) 并错过机会。List
有没有办法从一般值中删除一系列值,以实现可以为此进行优化?List
List
答:
10赞
khelwood
10/26/2023
#1
该方法返回列表子范围的视图,由相同的数据支持:对子列表所做的更改将反映在原始列表中。List
subList
因此,您可以使用并从可变列表中删除元素块:subList
clear
>>> List<Integer> values = new ArrayList<>(List.of(10,20,30,40,50,60));
values ==> [10, 20, 30, 40, 50, 60]
>>> values.subList(3,5).clear()
>>> values
values ==> [10, 20, 30, 60]
0赞
dan1st
10/26/2023
#2
由于可能有些列表没有像 khelwood 所描述的那样使用 subList
实现有效删除,因此在这种情况下可以使用迭代器。其时间复杂度可能因列表实现而异。
List<T> yourList = ...;//TODO
Iterator<T> it = yourList.listIterator(yourStartIndex);
for(int i=0; i<numberOfElementsToRemove && it.hasNext(); i++){
it.next();
it.remove();
}
在这里,该方法在要开始的位置创建一个。List#listIterator(int)
ListIterator
在那里,它会删除您要删除的任意数量的元素。这可能不会带来最佳性能,但它不需要查找每个元素的位置来单独删除。
评论
List
List
确实没有.你到底在问什么?请注意,“为什么不是某种方式”不是一个好问题。removeRange
listIterator(startIndex)
List
subList(...).clear()
LinkedList
subList().clear()
List