java中有一个返回子列表的方法:

public list<e> subList(int fromIndex, int toIndex){subListRangeCheck(fromIndex, toIndex,size);return new SubList(this , 0, fromIndex, toIndex);
}

返回一个fromIndex为起点,toIndex为终点(不包含终点)的子列表。从上实现代码中可以看到,先检查一下单签的fromIndex和toIndex是否合法,如果不合法,那么就退出了该函数逻辑。要是合法,可以看出其返回了一个this也就是原始列表的部分元素视图,这样就形成了一个子列表。

这也导致了,如果针对原来的list或者是sublist返回的list的修改(这里的修改是不涉及list大小),都是对同一段内存存储的数据做修改。(这种修改叫做非结构修改)

如果发生结构性修改的是原来的list(不包括由于返回的子list导致的改变),那么返回的子list语义上将会是undefined。在AbstractList(ArrayList的父类)中,undefined的具体表现形式是抛出一个ConcurrentModificationException。如果你在调用了sublist返回了子list之后,如果修改了原list的大小,那么之前产生的子list将会失效,变得不可使用。

特别提醒:在使用sublist部分的白盒测试要重点对上述情况做测试。

扩展阅读

  • 我想做软件测试,阿里的表哥给我推荐了这8本书

  • Docker与自动化测试及其测试实践

  • 刚进携程没几天就被开了,老大:测试计划写成这样?

技术点:注意Java的java.util.List.subList的坑相关推荐

  1. Java压缩技术(四) GZIP——Java原生实现

    转载自  Java压缩技术(四) GZIP--Java原生实现 GZIP常常用在linxu环境下,是一种非常简单的压缩算法.在Java实现API中,它仅仅包含两个实现类:GZIPInputStream ...

  2. gzip java 压缩_Java压缩技术(四) GZIP——Java原生实现

    熟悉linux的朋友可能都用过文件压缩命令,譬如最为简单的gzip命令. 相关链接: Java压缩技术(一) ZLib Java压缩技术(二) ZIP压缩--Java原生实现 Java压缩技术(三) ...

  3. 【JAVA基础☞探针技术】Java探针-Java Agent技术

    个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 1.原理:基于javaAgent和Java字节码注入技术的java探针工具技术原理 2.原理分析 动态代理功能实现说明,我们利用ja ...

  4. java.util类,GitHub - yutaolian/JavaUtils: 总结的一些Java常用的util类

    JavaUtils 总结的一些Java常用的util类 ###1.格式化时间 SimpleDateFormat(DateFormat)实现线程安全的使用 众所周知SimpleDateFormat(Da ...

  5. 推荐一个很牛逼的 Github 项目:本人历时半年完成的【Java 面试 + Java 后端技术学习指南】,已拿大厂offer

    今天给大家分享一份[Java 面试 + Java 后端技术学习指南]:一份通向理想互联网公司的面试指南,包括 Java,技术面试必备基础知识.Leetcode.计算机操作系统.计算机网络.系统设计.分 ...

  6. java调用easyxml接口_【技术教程】如何通过Java程序调用RTSP拉流协议视频平台EasyNVR程序接口?...

    原标题:[技术教程]如何通过Java程序调用RTSP拉流协议视频平台EasyNVR程序接口? RTSP协议视频平台EasyNVR经过多年的积累,已经是一套成熟且完善的视频平台了,用户可以通过网页直接访 ...

  7. java技术入门培训_入门java怎么自学?推荐谁的课程?

    想要知道如何学习Java首先需要对她有一个大致的了解,Java是面向对象的编程语言,具有简单性.分布式.安全性.平台独立与可移植性.多线程.动态性等特点.现在多用于编写桌面应用程序.Web应用程序.分 ...

  8. java sdp_[java,SDP] java 7 SDP 技术/Socket Direct Protocol 2

    With Java 7 and Sockets Direct Protocol , Java Now does RDMA ( Remote Direct Memory Access) 有了 SDP 技 ...

  9. 【Java】java.util.Objects 工具类方法研究

    [Java]java.util.Objects 工具类方法研究 Objects 与 Object 区别 Object 是 Java 中所有类的基类,位于java.lang包. Objects 是 Ob ...

最新文章

  1. 转:C#中Monitor对象与Lock关键字的区别分析
  2. Quartz-DateBuilder解读
  3. jquery ajax跨域访问webservice配置
  4. Jupyter 常用快捷键及导出py文件的方法
  5. [转载] python 字符串方法大全
  6. rk3399_android7.1的HDMI显示实现固定分辨率
  7. C3P0连接池的配置和使用
  8. maven 常用命令
  9. unit英语读音_unit是什么意思_unit翻译_读音_用法_翻译
  10. 周文强做客《逐梦年代》与主持人李思思讲述创业背后的秘密
  11. android网络诊断服务(ping网络的实现,判断网络是否可用)
  12. android实现本地视频播放功能,Android开发 MediaPlayer入门_播放本地视频
  13. 【ResNet】Deep Residual Learning for Image Recognition
  14. 无法开启 IE 开发者工具
  15. 全国高中数学联赛介绍
  16. poi hssfcellstyle 文字方向_揭秘!文字识别在高德地图数据生产中的演进
  17. 工业交换机冗余什么意思?
  18. 查询整体的字体族(设置字体样式) - iOS
  19. 基于Keras的LSTM多变量时间序列预测(北京PM2.5数据集pollution.csv)
  20. mysql数据库历史语句提取_如何从MySQL数据库的不同表中提取创建语句?

热门文章

  1. c# lu分解的代码_LU分解(1)
  2. wait会释放锁吗_漫画:如何证明sleep不释放锁,而wait释放锁?
  3. python集合set底层原理_Python进阶11_字典dict和集合set的秘密
  4. 乱斗西游2服务器修改,为我们的友谊干杯《乱斗西游2》转服功能邀你面基
  5. 纺织人工智能的下一个独角兽——智能验布机
  6. X 射线成像 新型数字技术 —— CMOS 探测器
  7. IPD+CMMI企业产品开发系统性解决方案
  8. 点击菜单选项,右侧主体区新增子界面(Tab)的实现
  9. 利用Python制作一个“电子记事本”
  10. Skype for Business Server 2015-12-WAP-发布-1-前端服务器-OWAS01