要想将一个子列表从其父列表中删除,可以使用java.util.List接口的subList方法和removeAll方法,见如下代码:
import java.util.ArrayList;
import java.util.List;
public class RemoveSubList {
public static void main(String[] args) {
List<Integer> test = new ArrayList<Integer>();
//init list
for (int i = 0; i < 5; i++) {
test.add(i); //auto boxing
}
//display the list
System.out.print("the orginal list: ");
for (int i = 0; i < test.size(); i++) {
System.out.print(test.get(i) + " ");
}
System.out.println();
//sub list contains elements: 1, 2
List<Integer> sub = test.subList(1, 3);
//remove sub list from test list
test.removeAll(sub); //wrong! throw exception!
//display the list again
System.out.print("the orginal list after remove sublist: ");
for (int i = 0; i < test.size(); i++) {
System.out.print(test.get(i) + " ");
}
System.out.println();
}
}
但是,运行代码却抛出异常
Exception in thread "main" java.util.ConcurrentModificationException
原因在于subList的实现原理。subList方法返回原始列表的一个子列表视图,该子列表视图的幕后仍然是原始列表,当改变返回的这个子列表时,父列表也同时发生改变。test.removeAll(sub);这行代码欲修改原始列表,其实无论是增加、删除还是更改其中的元素,子列表视图都会失效,所以报ConcurrentModificationException异常。
解决方法之一是将sub列表中的内容复制到一个临时列表中,再从test列表中删除这个临时列表。
//use temp list
List<Integer> temp = new ArrayList<Integer>();
for (int i = 0; i < sub.size(); i++) {
temp.add(sub.get(i));
}
//remove temp list from test list
test.removeAll(temp);
运行结果:
the orginal list: 0 1 2 3 4
the orginal list after remove sublist: 0 3 4
分享到:
相关推荐
在Java编程中,`subList`方法是`ArrayList`、`LinkedList`等集合类的一个重要功能,它允许我们从原始列表中创建一个子列表,这个子列表是原列表的一个视图,而不是复制。当我们调用`subList`时,对子列表的操作会...
在Java中,`List`接口提供了`subList(int fromIndex, int toIndex)`方法,用于返回列表的一个子列表,这个子列表是从`fromIndex`(包含)到`toIndex`(不包含)的元素。这意味着,你可以根据当前页数和每页的记录数...
Sublist3r是一个基于Python2.7的子域发现工具,其设计原理是基于通过使用搜索引擎,从而对站点子域名进行列举,旨在使用来自公共资源和暴力技术的数据枚举网站的子域。公共资源包括广泛的流行搜索引擎,如谷歌,雅虎...
《阿里巴巴Java开发手册》中提到要慎重使用ArrayList的subList方法,这主要是因为该方法返回的是一个视图,而非全新的独立列表。理解这个问题的关键在于了解`subList`方法的底层原理及其潜在风险。 首先,`subList`...
本篇内容将深入讲解列表推导的概念,以及如何利用它来解决实际问题,如场景1所述的从三维列表中提取特定元素并构建新的二维列表。 首先,我们来理解什么是列表推导。列表推导的基本形式是将一个表达式放在方括号[]...
sublist master exist git
英语Sublist list1答案
【学术英语词汇Sublist7前十个词汇及题目答案解析】 学术英语是专业英语的一种,它在学术交流、科研论文和高等教育中广泛使用。Sublist7是学术英语词汇的一部分,涵盖了一些核心和重要的词汇,这对于提升学术英语...
3. **Get Slice From List**: 获取列表的一个子列表,可以指定起始和结束索引。如 `@{fromlist} Get Slice From List ${list} 1` 获取从索引1开始的子列表,而 `@{fromtolist} Get Slice From List ${list} 1 3` ...
如果需要一次性添加多个元素,可以使用`extend()`方法,它接受另一个列表作为参数,并将其所有元素添加到原始列表。 5. **其他列表操作** - `insert(index, element)`:在指定位置插入元素。 - `remove(element)...
创建嵌套列表非常简单,只需在列表中包含另一个列表即可。例如: ```python nested_list = [1, 2, 3, [4, 5], [6, 7, [8, 9]]] ``` 在这个例子中,`nested_list`包含整数和两个子列表,每个子列表也包含整数。 2. ...
1. **创建嵌套列表**:在Python中,你可以通过将一个或多个列表作为元素放入另一个列表来创建嵌套列表。例如: ```python list1 = [1, 2, 3] list2 = ['a', 'b', 'c'] nested_list = [list1, list2] ``` 这里...
当遇到子列表时,迭代器应该将子列表中的所有元素连续地添加到结果序列中,而不是将其作为一个整体元素。也就是说,对于给定的输入`[[1,1],2,[1,1]]`,迭代器的预期输出应该是`[1,1,2,1,1]`。 解决方案: 解决这个...
标题“星空_sublist.zip”暗示了这是一个包含有关天文学信息的压缩文件,特别是与星空、星座和恒星相关的数据。这个文件可能是一个Python项目,用于分析、可视化或学习天文知识。描述中提到“Python直接读取”,意味...
Arrays.asList、ArrayList的subList坑
`remove(e)`方法从列表中移除第一次出现的指定元素`e`,如果列表中不存在该元素,则返回`false`。 ```java list.remove(index); ``` `remove(index)`方法移除列表中指定位置`index`的元素,并返回被移除的元素。...
7. **性能优化**:在处理大量数据时,如果需要创建独立的子列表副本,可以考虑使用`Collections.copy()`方法,这将创建一个真正独立的新列表,而不是共享视图。 8. **课程资源**:提供的课程资源可能包括详细的解释...
每个子列表都提供了丰富的词汇,涵盖了从基本的定义和描述,到复杂的分析和论证。通过学习和掌握AWL词汇,学生和学者可以提升自己的学术写作能力,更准确地表达观点,使论文更具说服力。此外,这些词汇同样适用于...
Sublist3r是一个python工具,用于枚举使用OSINT的网站的子域。它有助于渗透测试人员和漏洞猎手收集并收集他们所针对的域名的子域名。Sublist3r使用Google,Yahoo,Bing,百度和Ask等许多搜索引擎来枚举子域名。...
5. `select/3`: 从列表中选择并删除一个元素。`select(Element, List, NewList)` 会找到`List`中的第一个`Element`并将其移除,然后返回新的列表`NewList`。 6. `nth0/3` 和 `nth1/3`: 这两个谓词用于访问列表中的...