大家好,我是雄雄。

前几期我们说过,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

点分享

点点赞

点在看

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

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

    原文参考:<编写高质量代码:改善java程序的151个建议> 本文原创:穆雄雄 上期文章: subList?? subString??? 上期我们说到,List接口提供了subList方法 ...

  2. python创建数字列表_Python 生成一个从0到n个数字的列表4种方法小结

    Python 生成一个从0到n个数字的列表4种方法小结 我就废话不多说了,直接上代码吧! 第一种 def test1(): l = [] for i in range(1000): l = l + [ ...

  3. format函数python生成列表_python 全栈开发,Day14(列表推导式,生成器表达式,内置函数)...

    一.列表生成式 生成1-100的列表 li = [] for i in range(1,101): li.append(i) print(li) 执行输出: [1,2,3...] 生成python1期 ...

  4. Win10:无法生成“D:\System Volume Information”下常规子目录的列表。拒绝访问。

    文章目录 前言 修改注册表 总结 前言 此方法引用自微软社区:链接在此 更改桌面位置时不小心更改到了D盘根目录 尝试还原默认值时提示: Win10:无法生成"D:\System Volume ...

  5. Win10:无法生成“D:\System Volume Information“ 下常规子目录的列表。拒绝访问。

    Win10:无法生成"D:\System Volume Information" 下常规子目录的列表.拒绝访问. 1.问题背景 2.解决办法 2.1.右键该文件夹,重置存储位置为默 ...

  6. 爬虫(三)生成qq好友关系网(1)—登录并获得好友列表

    本文目标 1.使用selenium实现账号密码登录qq空间 2.使用多线程爬取qq好友的说说评论点赞情况保存至本地 3.使用echarts将数据可视化 开源地址:qq好友关系爬虫 这是帮我同学做的他的 ...

  7. python将某个列表按元素值分成多个子列表

    1. 将原列表排序,当相邻元素不同时,对原列表进行切片. def cutList1(orList): orList.sort() # 列表排序.默认从小到大 newList = [] # 空列表 n ...

  8. python列表添加字符串_2.python基础之—列表,元组,字典,集合,字符串的使用方法...

    一.关于python序列的简介. python里面的序列大部分都可以执行,索引,切片,加,乘,检查长度,以及检查某个成员是否存在,甚至还可以找出这个序列中最小的元素和最大的元素,并且序列都是可迭代的. ...

  9. python元组和列表都支持的方法是_python_列表和元组

    1.1.列表定义 列表是python中内置有序可变序列,列表的所有元素放在一对中括号"[]"中,并使用逗号分隔开: 一个列表中的数据类型可以各不相同,可以同时分别为整数.实数.字符 ...

最新文章

  1. 三、const常量声明方式
  2. Maven和Spring mvc下的页面的跳转与取值
  3. SparkSQL 控制文件输出的大小
  4. 防抖 节流_防抖节流与前端性能优化
  5. php事务 面向对象,PHP面向对象之事务脚本模式(详解)
  6. Linux驱动技术(六) _内核中断
  7. 学好python需要哪些基础_学Python要避免哪些坑,如何巩固好基础
  8. java 反射和泛型-反射来获取泛型信息
  9. property属性学习
  10. 爬虫404如何跳过_网络推广外包——网络推广外包专员如何从站内优化中提升网站收录...
  11. 80个练手H5小游戏实例DEMO和源码
  12. matlab双线性插值图像处理,数字图像处理:双线性插值
  13. 洛谷 P5713 【深基3.例5】洛谷团队系统
  14. C/C++源代码如何变成可执行程序的?
  15. MySQL学习记录(导入Excel表到数据库,并筛选条件输出)
  16. HMM(隐马尔可夫)笔记
  17. 计算机编程课程顺序_470道免费的在线编程和计算机科学课程,四月开始
  18. JDBC编程(Java操作数据库 MySQL)
  19. 〖产品思维训练白宝书 - 产品思维认知篇⑤〗- 学习 [产品思维] 需要做哪些准备?
  20. Nginx proxy_pass详解

热门文章

  1. hdu 2069 Coin Change(改)-dp
  2. redis api 中文文档_我的Redis学习资料库
  3. 数据结构----快速排序
  4. numpy创建zeros数组时报错TypeError: Cannot interpret ‘8‘ as a data type
  5. Caffe查看每一层学习出来的pattern
  6. Codeforces Round #587 (Div. 3) C. White Sheet 思维
  7. ADPC2-G 希望
  8. 2020牛客国庆集训派对day8
  9. P3690-[模板]Link Cut Tree(动态树)【Splay】
  10. 和某ZYC巨佬和XXY巨佬的随机挑战2总结