首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >测试应该关注java.util.List.subList的坑

测试应该关注java.util.List.subList的坑

作者头像
Criss@陈磊
发布2019-08-02 15:44:50
6660
发布2019-08-02 15:44:50
举报
文章被收录于专栏:测试技术圈测试技术圈

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

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 质问 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档