`

删除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();
             }
             
         }
     }

 

分享到:
评论

相关推荐

    注册表实现List添加,删除,保存,读取.zip

    - 删除List数据通常涉及到删除包含该List的整个注册表项。如果List是作为多个独立值存储的,则需分别删除对应的值。 7. **保存和加载**: - 保存是指将当前List的状态持久化到注册表,而加载是从注册表恢复List...

    ListCtrl 数据修改 添加 删除

    本篇文章将深入探讨如何在ListCtrl中进行数据的修改、添加和删除,以及如何实现动态自绘ComboBox控件。 首先,让我们关注ListCtrl的数据操作。ListCtrl通常在MFC(Microsoft Foundation Classes)框架下使用,可以...

    C#遍历List并删除某个元素的方法

    因此,对于大量删除操作,可以考虑使用其他数据结构,如LinkedList,或者使用Linq表达式来实现更高效的遍历和删除。 Linq表达式可以提供一种简洁的解决方案,如下所示: ```csharp list = list.Where(item =&gt; !...

    c#list添加数据

    在C#编程中,`List&lt;T&gt;` 是一种常用的动态数组,它允许我们在运行时添加、删除和访问元素。标题“c#list添加数据”指的是如何向已经实例化的`List&lt;T&gt;`对象中添加数据。描述中提到“list&lt;&gt;.count==0”的情况,即列表为...

    ListControl支持右键菜单动态添加、删除行

    在C++ MFC环境中,`ListControl`是一个常用的控件,用于显示多列数据,并且提供了灵活的定制功能。在本话题中,我们将深入探讨如何实现`ListControl`支持右键菜单动态添加和删除行的功能,以及如何进行编辑(edit)...

    listctrl 删除数据 ,列标题

    本话题主要讨论如何在C++环境下,利用MFC(Microsoft Foundation Classes)库来操作`ListCtrl`,特别是删除其中的数据和列标题。 首先,我们需要了解`ListCtrl`的基本结构。`ListCtrl`可以分为多个列,每个列可以...

    c# 如何删除datagridview中数据并删除数据库中的数据

    它支持多种数据源,包括但不限于DataTable、BindingSource、List、Array等。对于本问题而言,我们主要关注其与数据库交互的功能。 #### 2. 删除DataGridView中的数据 要删除DataGridView中的数据,首先需要确保已经...

    Android List删除重复数据

    "Android List删除重复数据" Android List删除重复数据是 Android 开发中一个常见的问题,删除重复数据可以提高列表的效率和可读性。在本文中,我们将介绍四种不同的方法来删除 Android List 中的重复数据。 方法...

    简单的ListCtrl多行删除

    ListCtrl是Windows应用程序开发中不可或缺的一部分,其提供的多行删除功能是处理大量数据时的一个重要技巧。通过理解和掌握上述技术点,开发者可以更加高效地管理和操作ListCtrl中的数据,提升应用程序的用户体验和...

    listctrl控件批量删除、修改

    在删除ListCtrl中的项时,通常也需要从数据库中删除相应的记录。这需要使用到数据库API,如ADO(ActiveX Data Objects)。ADO是微软提供的数据库访问接口,它提供了对各种数据库(包括Access)的操作,如连接、查询...

    将list数据通过LitePal保存到本地

    标题中的“将list数据通过LitePal保存到本地”是指在Android开发中,使用LitePal库将从服务器获取的list类型的数据存储到本地SQLite数据库中。LitePal是一个轻量级的ORM(Object-Relational Mapping)框架,它使得...

    两个集合比较(新增、编辑、删除)

    - `findDeletedItems(List&lt;T&gt; oldList, List&lt;T&gt; newList)`:返回在`newList`中被删除的元素。 5. **效率优化**: 以上方法都基于两次全遍历,当集合较大时可能效率较低。可以考虑使用`HashSet`或`TreeSet`来提高...

    MFC ListControl与Excel 数据导入导出

    ListControl是CListCtrl类的实例,它提供了添加、编辑和删除项的方法。每个项可以包含多个子项,对应于不同的列。通过设置LVCFMT_LEFT、LVCFMT_CENTER或LVCFMT_RIGHT等格式,可以控制列的对齐方式。 导入Excel数据...

    Android 保存List数据(SharedPreferences)

    然而,在某些场景下,我们可能需要临时保存一些小规模的List数据,这时可以采取一些技巧来实现。 首先,我们需要理解SharedPreferences的基本用法。SharedPreferences是Android提供的一种轻量级的数据持久化方式,...

    【JavaScript源代码】vue列表数据删除后主动刷新页面及刷新方法详解.docx

    在Vue.js应用中,当你需要在执行特定操作如删除或添加数据后刷新页面时,通常前端不会自动更新,因为Vue采用的是数据驱动视图的模式,仅当数据变化时才会更新视图。在这种情况下,我们可以采取手动刷新页面的方法。...

    C++ STL list 遍历删除出错解决方案

    错误用法通常出现在尝试同时遍历和删除list中的元素时。以下是三种常见的错误做法: 1. 错误用法一: 在这个例子中,迭代器`it`在调用`erase()`后未被更新,导致`it`成为了一个无效迭代器,因为`erase()`会使得迭代...

    Qt+QListWidget实现列表数据添加删除(源码+详细注释)

    同时,为了防止数据丢失,可能需要在数据模型(如QVector或QStringList)中维护一份完整的数据副本,只在用户确认后才更新列表显示。 总结起来,利用Qt的QListWidget组件,我们可以方便地创建一个具有数据添加和...

    Repeater 绑定 List 数据源

    二、List数据源 `List&lt;T&gt;`是.NET框架中的一个泛型类,用于存储同一类型的对象集合。它可以看作是一个动态大小的数组,提供了丰富的操作方法,如添加、删除、查找等,是常用的动态数据源之一。 三、Repeater与List的...

    javalist数据结构-Java数据结构-------List.pdf

    Java中的List接口是集合框架的重要组成部分,它定义了一组有序的元素序列,允许有重复的元素。ArrayList、Vector和LinkedList都是List接口的实现...在实际使用中,根据业务需求权衡性能和功能,选择最适合的数据结构。

Global site tag (gtag.js) - Google Analytics