首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

剔除list的数据

2012-06-27 
删除list的数据转载:?http://www.cnblogs.com/luxh/archive/2012/05/19/2509314.html?http://developer.51

删除list的数据

转载:

?

http://www.cnblogs.com/luxh/archive/2012/05/19/2509314.html

?

http://developer.51cto.com/art/201205/339130.htm

?

list转换成Iterator

http://topic.csdn.net/u/20090605/16/8459f033-142d-4144-a5fd-a2c41156567e.html

?

昨天一位项目组同事需要在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();             }                      }     }

?

热点排行