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

举报
穆雄雄 发表于 2022/12/12 21:04:26 2022/12/12
【摘要】 大家好,我是雄雄。今天我们还是分享关于集合的内容。假如有这样的需求,已知集合的长度为100,也就是集合中有100个元素,现需要删除索引20-30之间的元素,我们应该怎么实现呢?我们先初始化集合,代码如下:public static void testRemoveList(){ List<String> lists = new ArrayList<String>(100); for...

大家好,我是雄雄。

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

假如有这样的需求,已知集合的长度为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();

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

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。