神奇!一行代码实现删除某集合下标2030的元素

大家好,我是雄雄。

今天我们还是分享关于集合的内容。

假如有这样的需求,已知集合的长度为100,也就是集合中有100个元素,现需要删除索引20-30之间的元素,我们应该怎么实现呢?我们先初始化集合,代码如下:

public static void testRemoveList(){
    List<String> lists = new ArrayList<String>(100);
    for (int i = 0;i<100;i++) {
      lists.add("张三"+i);
    }
    
    //遍历集合
    for (String str : lists) {
      System.out.println(str);
    }
    
  }

这个很简单,肯定难不倒聪明的你,你或许会用这一种方法,通过for循环遍历集合,一律调用remove方法移除,关键代码如下所示:

//遍历集合,删除索引为20-30的元素
    int count = 0;
    for(int i = 0;i<lists.size();i++){
      //每次都删除下标为20的元素
      //当第一次删除掉下标为20的元素时,原来下标为21的元素此下标此时就成了20,删10次就可以了
      lists.remove(20);
      if(count==10){
        break;
      }
      count++;
    }

运行结果:

为什么需要这样写?如果我写成如下代码可以实现吗?

for(int i =0;i<lists.size();i++){
  if(i>=20&&i<=30){
    lists.remove(i);
  }
}

这样是不可以的,原因很简单,当我们把下标为20的元素删除之后,原来下标21的元素此时下标就会成20,所以这样实现不了删除20-30之间的元素。

言归正传,这种方法我们都知道,可是还有没有更简单的方法呢,答案是有的,回忆我们前几期一直在说的subList方法,因为subList方法可以直接返回原列表的子列表(视图),我们直接清空掉该子列表(视图)中的所有元素那不就实现了吗?故此我们可以使用一行代码即可解决问题,如下所示:

lists.subList(20, 30).clear();

怎么样,是不是很简单,一定要学会学以致用!

往期精彩

‘小会计’的转行之旅

2020-10-13

子列表只是原列表的一个视图

2020-10-12

“半路出家”的程序猿怎么不被“熊”

2020-10-11

某同学工作之后的感悟

2020-10-10

班级日常分享,一天一瞬间

2020-10-10

为了金秋那沉甸甸的麦穗,我绝不辜负春天

2020-10-09

subList?? subString???

2020-10-08

支持作者

赞赏就不用啦,生活都不易,右下角的“在看/赞”点一下,如果感觉文章不错,记得分享到朋友圈让更多人知道!

点分享

点点赞

点在看

原文地址:https://www.cnblogs.com/a1111/p/14877388.html