注意!在subList生成子列表之后,一定不要随便更改原列表

大家好,我是雄雄。

前几期我们说过,subList方法是返回原列表的子列表,并且我们还说过,在subList返回的子列表上操作时,会直接影响着原列表,原文在这里:

subList?? subString???

子列表只是原列表的一个视图

那么,大家有没有想过这样一个问题,在调用subList方法返回子列表之后,我们要是不操作子列表,而是操作的原列表,会怎么样呢?

下面我们先从一段代码上看起:

public static void testSubList(){//初始化一个集合List<String> lists = new ArrayList<String>();//给集合中添加四个元素lists.add("A");lists.add("B");lists.add("C");lists.add("D");//遍历集合System.out.println("原来集合中的元素:");for (String str: lists) {System.out.print(str+" ");}System.out.println("\n子列表中的元素:");List<String>new_list = lists.subList(0, 2);for (String str: new_list) {System.out.print(str+" ");}}

运行结果如下:

这块代码很好理解,无外乎就是初始化了个集合,并添加了几个元素,通过subList方法返回了一个子列表,最后将两个列表中的元素都遍历出来。

接下来我要改一下代码了,如下:

public static void testSubList(){//初始化一个集合List<String> lists = new ArrayList<String>();//给集合中添加四个元素lists.add("A");lists.add("B");lists.add("C");lists.add("D");//遍历集合System.out.println("原来集合中的元素:");for (String str: lists) {System.out.print(str+" ");}System.out.println("\n子列表中的元素:");List<String>new_list = lists.subList(0, 2);for (String str: new_list) {System.out.print(str+" ");}//给原来的集合中新加一个元素lists.add("E");System.out.println("\n新加元素之后原来集合的元素:");for (String str: lists) {System.out.print(str+" ");}System.out.println("\n新加元素之后子列表中的元素:");for (String str: new_list) {System.out.print(str+" ");}}

这段代码前面部分没有变,后面只是给原集合中新插入了一个元素“E”,然后对原集合以及子列表进行遍历,运行结果如下所示:

居然报错了?并且是在原集合中新加元素之后遍历子列表时报的错。ConcurrentModificationException是并发修改异常,但是我们这里并没有多线程操作,何来并发异常?其实,原因很简单,那就是subList方法是原列表的子列表,当原来的集合(原列表)修改之后,subList取出的子列表并未跟着一起修改,也就是不会生成新列表,最后在最字列表操作时,程序就会发现修改计数器(Modification)与预期的不符合,故抛出此异常。

因此,在subList生成子列表之后,一定不要随便更改原列表。

往期精彩

神奇!一行代码实现删除某集合下标20-30的元素

2020-10-14

‘小会计’的转行之旅

2020-10-13

班级日常分享,一天一瞬间

2020-10-14

子列表只是原列表的一个视图

2020-10-12

“半路出家”的程序猿怎么不被“熊”

2020-10-11

某同学工作之后的感悟

2020-10-10

班级日常分享,一天一瞬间

2020-10-10

点分享

点点赞

点在看

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/324630.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DotNetCore跨平台~Dockerfile的解释

大叔感觉网上对Dockerfile的说明不是很清楚&#xff0c;或者说怎么去用说的不清楚&#xff0c;在vs2017里我们可以去建立自己的Dockerfile文件&#xff0c;然后你的项目可以被生成一个镜像&#xff0c;把它推到仓库之后&#xff0c;你可以在linux,mac上去run你的项目了&#xf…

当你「ping 一下」的时候,你知道它背后的逻辑吗

转载自 当你「ping 一下」的时候&#xff0c;你知道它背后的逻辑吗 我们在遇到网络不通的情况&#xff0c;大家都知道去 ping 一下&#xff0c;看一下网络状况。 那你知道「ping」命令后背的逻辑是什么吗&#xff1f;知道它是如何实现的吗&#xff1f; 一、「ping」命令的作…

POJ1611-嫌犯【图论,并查集】

正题 题目链接&#xff1a; http://poj.org/problem?id1611 大意 有n个人&#xff0c;m个组&#xff0c;有一个流感嫌犯&#xff0c;流感嫌犯会将所在的组的所有人变成流感嫌犯&#xff0c;求流感嫌犯的数量。 解题思路 并查集将各个组合并&#xff0c;然后看看那些人是和…

python的三元运算

a 10 b 5if a > 15 :c a else:c bd a if a > 15 else bd 值1 if 条件A else 值2如果条件A成立&#xff0c;就取左边的 值1&#xff0c;则 取 值2

​凌云KTV点歌系统功能简介

19级青鸟三班 凌云小组指导老师&#xff1a;穆雄雄老师 班主任&#xff1a;王欣欣老师小组成员&#xff1a;组长&#xff1a;李磊 副组长&#xff1a;杨云浩组员&#xff1a;高启航 朱齐 李欣然 高松 张方仪 王浩如 苏荟旭 贾增伟制作周期&#xff1a;2020年9月25日-10月…

REST参考手册

总说接口定义要遵守 RESTful&#xff0c;那么什么是REST呢&#xff0c;今天跟小编一起来了解一下这个规范吧~&#xff01; 原文作者简介&#xff1a; BRIAN SLETTEN是一个关注前沿技术的软件工程师&#xff0c;现居于加州奥本。他的职业生涯横跨了各个行业&#xff0c;包括零售…

漫画:如何用栈实现队列

转载自 漫画&#xff1a;如何用栈实现队列 栈的特点是先入后出&#xff0c;出入元素都是在同一端&#xff08;栈顶&#xff09;&#xff1a; 入栈&#xff1a; 出栈&#xff1a; 队列的特点是先入先出&#xff0c;出入元素是在不同的两端&#xff08;队头和队尾&#xff09;…

POJ2524——宗教(Ubiquitous Religions)【图论,并查集】

正题 题目链接&#xff1a; http://poj.org/problem?id2524 大意 有n个学生&#xff0c;告诉你哪两个学生的宗教相等&#xff0c;求校园里有多少个宗教。 解题思路 并查集链接就好了 代码 #include<cstdio> using namespace std; int n,m,x,y,s,father[50001],t; i…

深入理解python的元组本身不可变性

元组本身不可修改&#xff0c; 如果包含可修改的数据类型&#xff0c; 那被包含的数据类型可以修改。

SQ小组KTV点歌系统简介

19级青鸟三班 SQ小组指导老师&#xff1a;穆雄雄老师 班主任&#xff1a;王欣欣老师小组成员:组长:王世泽 副组长:张坤鹏 组员:渠德春 徐龙翥 泮迎国 程至婷 樊永奇 杜坤凯 李含笑 吴俊衫1项目整体运行视频&#xff1a;KTV前端主页点歌系统主页进入主页面后左边第一个是演唱…

什么是ABTest

转载自 什么是ABTest 在互联网公司的业务发展过程中&#xff0c;用户增长是永恒的主题&#xff0c;因为没有增长也就没有发展&#xff0c;所以在业务发展的早期产品迭代速度往往是越快越好&#xff0c;总之一句话&#xff1a;“怎么快怎么来”&#xff0c;至于系统建设得是否可…

Quartz.net基于数据库的任务调度管理(Only.Jobs)

一 前言&#xff1a; 各大调度组件优缺点在这就不讨论了&#xff0c;使用Quartz.net是因为它可以执行秒级任务。 Only.Jobs 项目通过将各Job存储在数据库中&#xff0c;启动一个专门的Job管理任务来循环调度各Job的的调度情况。 项目分为 Web管理系统 、服务运行端 、数据…

畅想小组KTV点歌系统简介

19级青鸟三班畅想小组指导老师&#xff1a;穆雄雄老师班主任&#xff1a;王欣欣老师小组成员:组长:毛帅龙 副组长:扈明旺组员:张俊豪 靖相民 袁康凯 魏子凯 李明义 魏婉莹 谢润祺 项目整体运行视频&#xff1a;1主页面功能&#xff1a;可以根据用户所需要的页面进行显示和隐藏…

POJ2560-雀斑(Freckles)【图论,并查集,最小生成树,KURUSKAL】

正题 题目链接&#xff1a; http://poj.org/problem?id2560 大意 有n个点&#xff0c;给出坐标&#xff0c;求连接这n个点的最短路线 解题思路 KURUSKAL算法求最小生成树。 代码 #include<cstdio> #include<cmath> #include<algorithm> using namespac…

使用Docker Swarm搭建分布式爬虫集群

转载自 使用Docker Swarm搭建分布式爬虫集群 在爬虫开发过程中&#xff0c;你肯定遇到过需要把爬虫部署在多个服务器上面的情况。此时你是怎么操作的呢&#xff1f;逐一SSH登录每个服务器&#xff0c;使用git拉下代码&#xff0c;然后运行&#xff1f;代码修改了&#xff0c;…

Docker~从Dockerfile到Container的过程

上一文章&#xff0c;主要介绍Dockerfile里各参数的含义&#xff0c;以及在项目文件里这些内容的含义&#xff0c;因为大叔认为官方和网上其它文章说的有些模棱两可&#xff0c;不太好让大家理解&#xff0c;所有我又从新写了一个大白话的文章&#xff0c;希望可以给大家一些帮…

驭梦KTV点歌系统简介

19级青鸟三班驭梦小组指导老师&#xff1a;穆雄雄老师班主任&#xff1a;王欣欣老师小组成员&#xff1a;组 长&#xff1a;刘文瑞 副组长&#xff1a;陈浴森组员&#xff1a;蒋建强、翟帅、谢学致、申世业、潘浩杨、芦泽宇、季淑琦、冯涵婷制作周期&#xff1a;2020年9月25日-…

一文让你秒懂字符编码

字符编码 文字是如何显示的 128 64 32 16 8 4 2 165 0 1 0 0 0 0 0 1 108 0 1 1 0 1 1 0 1 148 0 0 1 1 0 0 0 0二进制 ——》十进制 9 A 1101101 l 1101101 e x 11011011101101 设定为&#xff0c;每8个2进制位代表一个字符 论断句的重要性 8bit 1bytes 字节 &#…

ssl1222-矩形【图论,并查集】

正题 大意 有n个正方形&#xff0c;求块数。 解题思路 用并查集求块数 代码 #include<cstdio> #include<algorithm> using namespace std; int i,lt[7001],x1[7001],y1[7001],x2[7001],y2[7001],n,s; int father(int x) {if (lt[x]!x) lt[x]father(lt[x]);ret…