从 Java 中的 arrayList 中删除最后 n 个元素
Removing last n elements from arrayList in Java
示例:
list1 = [10,20,30,40,50] 大小 = 5
根据 list1=5 的大小,我需要从 list2 中删除最后 5 个元素
列表 2 = [11,23,32,12,21,21]
输出=[11]
如果列表 1 的大小为 n,我需要从列表 2 中删除最后 n 个元素?
实现这一目标的有效方法是什么?
您可以创建一个 while-loop
,像这样:
List yourList = ...; // Your list
int removed = 0; // Setup the variable for removal counting
while (removed < Math.min(secondList.size(), 5)) { // While we still haven't removed 5 entries OR second list size
yourList.remove(yourList.size() - 1); // Remove the last entry of the list
removed++; // Increases 'removed' count
}
你可以考虑使用 ArrayList 的 subList(...) 方法。
因为您的 N = list1.length()
我们应该开始删除的第一个元素的索引可以计算为
/*
list1: 3, 4, 5, 6 (length=4)
list2: a, b, c, d, e, f (length=6)
^- element from which we start deleting, its index = 2 (6-4)
*/
int indexOfFirstElementToRemove = list2.size() - list1.size();
注意:我们不知道 list1 是否总是小于 list2。如果不是,则 indexOfFirstElementToRemove
将为负数或 0。在这种情况下,我们需要从 list2 中删除所有元素,因此调用 list2.clear()
就足够了。
要在迭代时删除元素,我们使用 Iterator 或 ListIterator(如果可用)。要从指定索引开始迭代,我们可以使用
ListIterator<ElementType> iterator = listOfElements.listIterator(firstElementIndex);
因此我们的最终解决方案如下所示:
List<Integer> list1 = Stream.of(2, 3, 4, 5).collect(Collectors.toList());
List<Integer> list2 = Stream.of(0, 1, 2, 3, 4, 5).collect(Collectors.toList());
int indexOfFirstElementToRemove = list2.size() - list1.size();
if (indexOfFirstElementToRemove > 0) {
ListIterator<Integer> iterator = list2.listIterator(indexOfFirstElementToRemove);
while (iterator.hasNext()) {
iterator.next();
iterator.remove();
}
} else {//indexOfFirstElementToRemove<=0 so we need to remove all elements from list2
list2.clear();
}
System.out.println(list2); //Output: [0, 1]
示例:
list1 = [10,20,30,40,50] 大小 = 5
根据 list1=5 的大小,我需要从 list2 中删除最后 5 个元素
列表 2 = [11,23,32,12,21,21]
输出=[11]
如果列表 1 的大小为 n,我需要从列表 2 中删除最后 n 个元素?
实现这一目标的有效方法是什么?
您可以创建一个 while-loop
,像这样:
List yourList = ...; // Your list
int removed = 0; // Setup the variable for removal counting
while (removed < Math.min(secondList.size(), 5)) { // While we still haven't removed 5 entries OR second list size
yourList.remove(yourList.size() - 1); // Remove the last entry of the list
removed++; // Increases 'removed' count
}
你可以考虑使用 ArrayList 的 subList(...) 方法。
因为您的 N = list1.length()
我们应该开始删除的第一个元素的索引可以计算为
/*
list1: 3, 4, 5, 6 (length=4)
list2: a, b, c, d, e, f (length=6)
^- element from which we start deleting, its index = 2 (6-4)
*/
int indexOfFirstElementToRemove = list2.size() - list1.size();
注意:我们不知道 list1 是否总是小于 list2。如果不是,则 indexOfFirstElementToRemove
将为负数或 0。在这种情况下,我们需要从 list2 中删除所有元素,因此调用 list2.clear()
就足够了。
要在迭代时删除元素,我们使用 Iterator 或 ListIterator(如果可用)。要从指定索引开始迭代,我们可以使用
ListIterator<ElementType> iterator = listOfElements.listIterator(firstElementIndex);
因此我们的最终解决方案如下所示:
List<Integer> list1 = Stream.of(2, 3, 4, 5).collect(Collectors.toList());
List<Integer> list2 = Stream.of(0, 1, 2, 3, 4, 5).collect(Collectors.toList());
int indexOfFirstElementToRemove = list2.size() - list1.size();
if (indexOfFirstElementToRemove > 0) {
ListIterator<Integer> iterator = list2.listIterator(indexOfFirstElementToRemove);
while (iterator.hasNext()) {
iterator.next();
iterator.remove();
}
} else {//indexOfFirstElementToRemove<=0 so we need to remove all elements from list2
list2.clear();
}
System.out.println(list2); //Output: [0, 1]