要想将一个子列表从其父列表中删除,可以使用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
分享到:
相关推荐
Sublist3r是一个基于Python2.7的子域发现工具,其设计原理是基于通过使用搜索引擎,从而对站点子域名进行列举,旨在使用来自公共资源和暴力技术的数据枚举网站的子域。公共资源包括广泛的流行搜索引擎,如谷歌,雅虎...
sublist master exist git
本篇文章主要介绍了java中list数据拆分为sublist实现页面分页的简单代码,具有一定的参考价值,有需要的可以了解一下。
主要介绍了为什么要慎重使用ArrayList中的subList方法,subList是List接口中定义的一个方法,该方法主要用于返回一个集合中的一段、可以理解为截取一个集合中的部分元素,他的返回值也是一个List。,需要的朋友可以...
英语Sublist list1答案
正如题目所言,这是学术英语词汇Sublist7前十个词汇及题目还有答案,下一个文件是个别题目的解析。
NULL 博文链接:https://xieyan30.iteye.com/blog/1692425
Arrays.asList、ArrayList的subList坑
Sublist3r是一个python工具,用于枚举使用OSINT的网站的子域。它有助于渗透测试人员和漏洞猎手收集并收集他们所针对的域名的子域名。Sublist3r使用Google,Yahoo,Bing,百度和Ask等许多搜索引擎来枚举子域名。...
欢迎来到列表分析任务您将获得一个包含字符和数字的列表。 您需要在Python 3中编写一个函数,该函数标识包含相同数量字符和数字的最长子列表。 返回带有开始和结束索引的元组。 如果此子列表为空,则返回(0,0)。 ...
这是学术英语词汇Sublist7前十个词汇习题的部分解析,本人自己整理的,有需求者可私信我,免费发送给需要的人,大家共同学习,相互促进
Sublist3r是一个python工具,旨在使用OSINT枚举网站的子域。 它可以帮助渗透测试人员和Bug猎手收集和收集他们所针对的域的子域。 Sublist3r使用许多搜索引擎(例如Google,Yahoo,Bing,Baidu和Ask)枚举子域。 ...
以后还会持续更新,这是之前17级版本的大学英语学术词汇中,Sublist7里前20个单词,里面有对应的意思,词性,和近义词,相对应的句子,句子来源于最近几年的四六级真题,或者是牛津词典(第9版),本人自己编写,...
也可以使⽤should be equal来做相等判断 8 Remove (Values) From List-删除list中某个值 Remove From List:按照index删除,⼀次删除1个 Remove Values From List:按照value值删除,⼀次可删除多个 ⽰例如2.6 9 ...
Gitodo 是一个简单的 CLI 实用程序,用于管理待办事项列表项,使用 github 存储库作为数据存储。 Todo 列表在 Markdown 文件中存储和管理。 Gitodo 支持列表内的子列表,以及列表/子列表创建、检查项目、列出项目...
最简单的方法是克隆此GIT,然后将sublist3r克隆到同一文件夹中。 对于python,需要安装以下内容。 pip install pandas pip install click 安装后的文件夹结构如下: ✘ :high_voltage: root@pentest ~/Tools/...
现有一个列表,里面元素包括 数字,字母,列表,字典等元素,现在要将字典去掉,并将列表 分解成字母,或数字元素如:[[1,2,3],2,3,[1,3,[12,22]],'a',12] 经函数处理后[1, 2, 3, 2, 3, 1, 3, 12, 22, 'a', 12] ...
本课件是一个动态演示数据结构算法执行过程的辅助教学软件, 它可适应读者对算法的输入数据和过程执行的控制方式的不同需求, 在计算机的屏幕上显示算法执行过程中数据的逻辑结构或存储结构的变化状况或递归算法执行...
所有重复的员工都存储在一个称为重复的数组列表中,但是出于本项目的目的,他们不再做任何事情。 通过JUnit测试隐含通过测试,以确保项目中的所有方法均按预期工作对项目的各个方面都进行了性能测试,包括测试执行...