Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 339|回复: 0

[集合学习]删除ArrayList中的指定(有重复)元素

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-28 23:55:27 | 显示全部楼层 |阅读模式
    昨天一位同事需要在ArrayList中删除所有不等于指定值的元素,但是她弄了很久,发现总是删得不完全。刚好我以前做过类似的功能,就告诉她是因为ArrayList删除元素后长度变小了,元素的索引也会跟着改变,但是迭代的下标没有跟着相应的改变的缘故。 将一些删除方法做一些总结:
    1. import java.util.*;
    2. public class TestListDel{  
    3.     /**
    4.        * 删除Arraylist中值为"c"的元素
    5.        */
    6.       public static void main(String[] args) {
    7.          
    8.           List
    9.    
    10.       list = new ArrayList
    11.      
    12.       ();
    13.          
    14.           //"c"在Arraylist不连续存储
    15.           /*
    16.          list.add("c");
    17.          list.add("a");
    18.          list.add("c");
    19.          list.add("b");
    20.          list.add("c");
    21.          list.add("d");
    22.          list.add("c");
    23.          */
    24.          
    25.          //"c"在Arraylist有连续存储
    26.          list.add("a");
    27.          list.add("c");
    28.          list.add("c");
    29.          list.add("b");
    30.          list.add("c");
    31.          list.add("c");
    32.          list.add("d");
    33.          list.add("c");
    34.          
    35.          
    36.          //删除Arraylist中值为"c"的元素
    37.          
    38.          //有可能不能全部删除
    39.          removeListElement1(list);
    40.          
    41.          //能够正确删除
    42.          //removeListElement2(list);
    43.          
    44.          //能够正确删除
    45.          //removeListElement3(list);
    46.          display(list);
    47.      }
    48.      
    49.       public static void display(List< String> list){
    50.          Iterator< String> iterator = list.iterator();
    51.          while(iterator.hasNext()) {
    52.              System.out.println(iterator.next());
    53.          }
    54.       }
    55.               
    56.      
    57.      /**
    58.       *   删除list中值为"c"的元素
    59.       *
    60.       *   这种方式:
    61.       *   
    62.       *   当值为"c"的元素在Arraylist中不连续存储的时候,是可以把值为"c"的元素全部删掉
    63.       *   
    64.       *   但是当值为"c"的元素在Arraylist中有连续存储的时候,就没有把值为"c"的元素全部删除
    65.       *   因为删除了元素,Arraylist的长度变小了,索引也会改变,但是迭代的下标没有跟着变小
    66.       */
    67.      public static void removeListElement1(List< String> list) {
    68.          for(int i=0;i< list.size();i++) {
    69.              if("c".equals(list.get(i))) {
    70.                  list.remove(i);
    71.              }
    72.          }
    73.          
    74.      }
    75.      
    76.      /**
    77.       * 删除Arraylist中值为"c"的元素
    78.       *
    79.       * 这种方式:
    80.       *
    81.       * 不管值为"c"的元素在Arraylist中是否连续,都可以把值为"c"的元素全部删除
    82.       */
    83.      public static void removeListElement2(List< String> list) {
    84.          for(int i=0;i< list.size();i++) {
    85.              if("c".equals(list.get(i))) {
    86.                  list.remove(i);
    87.                  --i;//删除了元素,迭代的下标也跟着改变
    88.              }
    89.          }
    90.      }
    91.      
    92.      /**
    93.       * 删除Arraylist中值为"c"的元素
    94.       *
    95.       * 这种方式:
    96.       *
    97.       * 不管值为"c"的元素在list中是否连续,都可以把值为"c"的元素全部删除
    98.       *
    99.       * 需保证没有其他线程同时在修改
    100.       */
    101.      public static void removeListElement3(List< String> list) {
    102.          Iterator< String> iterator = list.iterator();
    103.          while(iterator.hasNext()) {
    104.              String str = iterator.next();
    105.              if("c".equals(str)) {
    106.                  iterator.remove();
    107.              }
    108.             
    109.          }
    110.    }
    111. }
    112.      
    113.    
    复制代码
    运行结果:
    D:java>java TestListDel
    a
    c
    b
    c
    d

       
         
         
          
          

            
          

            
          
         
       

      


    源码下载:http://file.javaxxz.com/2014/10/28/235527343.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-26 04:35 , Processed in 0.294123 second(s), 36 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表