测者的测试技术手册:测试应该关注java.util.List.subList的坑
发表人: Criss@测者
0 0 0
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将会失效,变得不可使用。
最新发表 最多点赞 最近回复
点击发表评论
暂无评论,快来抢沙发哦~
文章作者
Criss@测者
发私信
京东测试架构师,AJPECSS编委。拥有多年的测试及测开经验,主导了京东工程生产力平台以及设计和研发,熟悉质量保障流程,对测试技术、方法有深入的研究。双态IT联盟《敏捷测试白皮书》特邀专家。北方工大企业导师。2018TID特约讲师、云测峰会特约讲师的,TID人工智能特约讲师。《决战618:探秘京东技术取胜之道》、《京东质量团队转型实践-从测试到测试开发的蜕变 》的作者,论文近30篇,专利20余项目