动态删除ArrayList中的元素

开发 后端
昨天一位项目组同事需要在ArrayList中删除所有不等于指定值的元素,但是她弄了很久,发现总是删得不完全。刚好我以前做过类似的功能,就告诉她是因为ArrayList删除元素后长度变小了,元素的索引也会跟着改变,但是迭代的下标没有跟着相应的改变的缘故。

昨天一位项目组同事需要在ArrayList中删除所有不等于指定值的元素,但是她弄了很久,发现总是删得不完全。刚好我以前做过类似的功能,就告诉她是因为ArrayList删除元素后长度变小了,元素的索引也会跟着改变,但是迭代的下标没有跟着相应的改变的缘故。

将一些删除方法做一些总结:

/**  
      * 删除Arraylist中值为"c"的元素  
      */ 
     public static void main(String[] args) {  
           
         List<String> list = new ArrayList<String>();  
           
         //"c"在Arraylist不连续存储  
         /*  
         list.add("c");  
         list.add("a");  
         list.add("c");  
         list.add("b");  
         list.add("c");  
         list.add("d");  
         list.add("c");  
         */ 
           
         //"c"在Arraylist有连续存储  
         list.add("a");  
         list.add("c");  
         list.add("c");  
         list.add("b");  
         list.add("c");  
         list.add("c");  
         list.add("d");  
         list.add("c");  
           
           
         //删除Arraylist中值为"c"的元素  
           
         //有可能不能全部删除  
         //removeListElement1(list);  
           
         //能够正确删除  
         //removeListElement2(list);  
           
         //能够正确删除  
         //removeListElement3(list);  
     }  
       
       
     /**  
      *        删除list中值为"c"的元素  
      *   
      *   这种方式:  
      *     
      *   当值为"c"的元素在Arraylist中不连续存储的时候,是可以把值为"c"的元素全部删掉  
      *     
      *   但是当值为"c"的元素在Arraylist中有连续存储的时候,就没有把值为"c"的元素全部删除  
      *   因为删除了元素,Arraylist的长度变小了,索引也会改变,但是迭代的下标没有跟着变小  
      */ 
     public static void removeListElement1(List<String> list) {  
         for(int i=0;i<list.size();i++) {  
             if("c".equals(list.get(i))) {  
                 list.remove(i);  
             }  
         }  
           
     }  
       
     /**  
      * 删除Arraylist中值为"c"的元素  
      *   
      * 这种方式:  
      *   
      * 不管值为"c"的元素在Arraylist中是否连续,都可以把值为"c"的元素全部删除  
      */ 
     public static void removeListElement2(List<String> list) {  
         for(int i=0;i<list.size();i++) {  
             if("c".equals(list.get(i))) {  
                 list.remove(i);  
                 --i;//删除了元素,迭代的下标也跟着改变  
             }  
         }  
     }  
       
     /**  
      * 删除Arraylist中值为"c"的元素  
      *   
      * 这种方式:  
      *   
      * 不管值为"c"的元素在list中是否连续,都可以把值为"c"的元素全部删除  
      *   
      * 需保证没有其他线程同时在修改  
      */ 
     public static void removeListElement3(List<String> list) {  
         Iterator<String> iterator = list.iterator();  
         while(iterator.hasNext()) {  
             String str = iterator.next();  
             if("c".equals(str)) {  
                 iterator.remove();  
             }  
               
         }  
     } 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.
  • 91.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.

原文链接:http://www.cnblogs.com/luxh/archive/2012/05/19/2509314.html

责任编辑:林师授 来源: programmer_luxh的博客
相关推荐

2015-03-25 11:42:52

Java删除特定元素

2015-08-04 09:18:26

JavaArrayList元素

2012-03-19 09:57:09

JavaArrayList

2024-01-05 15:06:04

元素程序员review

2022-01-07 19:50:14

元素java集合

2012-01-12 13:24:55

Java

2021-07-22 09:53:34

Vector类Java添加元素

2022-01-20 09:58:44

Python元素列表

2019-11-06 16:21:25

ArrayListLinkedListVector

2023-08-30 09:00:05

2011-05-26 14:49:53

ArrayListLinkedList

2009-11-25 16:40:55

PHP函数array_

2009-11-24 18:28:44

PHP函数array_

2024-06-03 10:07:22

Vector类元素向量

2020-12-14 08:03:52

ArrayList面试源码

2009-11-30 18:21:21

PHP删除数组元素

2023-04-03 07:03:51

阿里巴巴List元素

2021-07-12 11:01:15

Vector元素方法

2010-09-08 17:11:29

CSS块元素CSS内联元素

2024-10-05 00:00:15

ArrayList性能Java
点赞
收藏

51CTO技术栈公众号