转载

测者的测试技术手册:测试应该关注java.util.List.subList的坑

测者的测试技术手册:测试应该关注java.util.List.subList的坑

发表人: Criss@测者

0 0 0

测者聊测试技术:注意Java的java.util.List.subList的坑

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部分的白盒测试要重点对上述情况做测试。

最新发表 最多点赞 最近回复

点击发表评论

暂无评论,快来抢沙发哦~

文章作者

测者的测试技术手册:测试应该关注java.util.List.subList的坑

Criss@测者

发私信

京东测试架构师,AJPECSS编委。拥有多年的测试及测开经验,主导了京东工程生产力平台以及设计和研发,熟悉质量保障流程,对测试技术、方法有深入的研究。双态IT联盟《敏捷测试白皮书》特邀专家。北方工大企业导师。2018TID特约讲师、云测峰会特约讲师的,TID人工智能特约讲师。《决战618:探秘京东技术取胜之道》、《京东质量团队转型实践-从测试到测试开发的蜕变 》的作者,论文近30篇,专利20余项目

原文  https://www.epubit.com/selfpublish/articleDetail?id=7ef9c82c-273d-4561-ac62-7a332603fc69
正文到此结束
Loading...