Java中subList的坑

java.util.List中有一个subList方法,用来返回一个list的一部分的视图。 之所以说是视图,是因为实际上,返回的list是靠原来的list支持的。

通过查看源代码我们可以看到subList返回的是一个new SubList()的对象,但是在该对象中保留了操作数组的引用,以及要需要读取的fromIndex,和 toIndex.

第一坑:

    1.通过对原List或者subList出来的List中的元素进行修改,那么两者会相互影响。即:修改他们中的任何一个都会影响另一个。

    2.如果对原List进行元素的添加或者删除操作,那么会让子list语义上将会是undefined,在AbstractList(ArrayList的父类)中,undefined的具体表现形式是抛出一个ConcurrentModificationException。

第二坑:

    如果subList出来的List重新赋值给原List,那么这样会造成内存溢出。

List<String> list = new ArrayList();
for(int i=0;i<10000;i++){
  list.add(i+"");
  int endIndex = list.size() > 3 ?3 :list.size();
  list = list.subList(0,endIndex);
}

转载于:https://my.oschina.net/u/2321816/blog/810381

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值