`

循环List时删除其中的元素

    博客分类:
  • java
 
阅读更多
情景:

今天在做项目的时候需要对两个字符串类型List集合A,B进行比较,两个集合中有相同的元素,需要循环两个集合,找出两个集合中相同的字符串、分别出不同的字符串,执行不同的数据库操作。实现思想:外层循环集合A,内部循环集合B,如果B中元素有与当前的集合A中元素相同的,则把B中该元素移除掉(使用迭代器),但是执行时报错:java.util.AbstractList.remove(AbstractList.java:230)

代码如下:

        List<String> f = Arrays.asList(formerssdq.split(","));
        List<String> n = Arrays.asList(ssdq.split(","));
        for(String fl : f) {
            if(n.contains(fl)) {
                Iterator<String> iter = n.iterator();
                while(iter.hasNext()) {
                    String nl = iter.next();
                    if(nl.equals(fl)) {
                        iter.remove();
                    }
                }
            }
        }
尝试了几次还是报错,以前使用过迭代器删除元素,可是始终报错,在百思不得其解时,在网上查到原来问题出现在Arrays.asList("...")上面,Arrays.asList返回的ArrayList并不是java.util.ArrayList,而是在Arrays类中重新定义的一下内部类ArrayList,这个ArrayList并没有重写remove方法。
解决办法:
使用
        String[] fList = formerssdq.split(",");
        List<String> formerList = new ArrayList<String>();
        for(String f : fList) {
            formerList.add(f);
        }
  代替了List<String> f = Arrays.asList(formerssdq.split(","));
同理List<String> n = Arrays.asList(ssdq.split(","));也用同样的组织结构代替,这下就不报错了。
总结:
     在遇到问题的时候,要理解里面的原理才是解决问题的重要方法。
     同时本次还了解了retainAll的方法。
retainAll:取得两个List的交集,测试代码如下:
    public static void main(String[] args) {
        List<String> list=new ArrayList<String>();
        list.add("1");  //向列表中添加数据
        list.add("2");  //向列表中添加数据
        list.add("3");  //向列表中添加数据
        List<String> list1=new ArrayList<String>();
        list1.add("1");  //向列表中添加数据
        list1.add("2");  //向列表中添加数据
        boolean ret=list.retainAll(list1);
        if(ret){
            System.out.println("元素被移除成功");
            for(String s : list) {
                System.out.println(s);
            }
            System.out.println("-----------");
            for(String s : list1) {
                System.out.println(s);
            }
        }else{
            System.out.println("列表中没有不相同的元素");
        }

    }


参考网址:http://www.cnblogs.com/BensonHe/p/3604278.html
分享到:
评论

相关推荐

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

    当我们需要遍历List并根据条件删除特定元素时,需要注意正确的方法,以避免在遍历过程中出现错误。以下将详细介绍如何在C#中遍历List并删除元素,包括正序和倒序遍历的技巧。 首先,我们来看一下错误的遍历方式。...

    java中循环删除list中元素的方法总结

    在Java编程中,当需要在循环中删除列表(List)中的元素时,需要注意一些关键点以避免潜在的问题。这里我们将详细讨论几种不同的循环遍历和删除元素的方法,以及它们的适用场景。 1. **常规for循环**: ```java for...

    浅析jquery数组删除指定元素的方法:grep()

    在开发中,我们常常需要对数组进行操作,其中就包括删除数组中的指定元素。在JavaScript中,原生提供的`splice()`方法是一种常用的方式,它通过指定的索引位置来删除元素。然而,在某些情况下,使用`splice()`方法...

    基于list循环删除元素,迭代器失效的问题详解

    总结来说,当在循环中删除`std::list`元素时,必须小心处理迭代器,确保它们不会因元素的删除而失效。可以使用迭代器的副本或`erase()`的返回值来维护有效的迭代器状态。理解这一点对于编写稳定、高效的C++代码至关...

    Python list列表中删除多个重复元素操作示例

    我们以下面这个list为例,删除其中所有值为6的元素: l=[9,6,5,6,6,7,8,9,6,0] 首先尝试remove方法: l.remove(6) print(l) 结果为:[9, 5, 6, 6, 7, 8, 9, 6, 0],只删除了第一个为6的元素。 如果采用for循环...

    Java 实例 - List 循环移动元素源代码+详细指导教程.zip

    List接口允许我们在集合中按索引访问元素,并且支持插入、删除和修改操作。本教程将深入讲解如何在Java中对List进行循环移动元素的操作,通过源代码实例和详细指导来帮助你掌握这一技能。 首先,我们需要理解Java中...

    在list集合中输入元素,去除重复的元素并输出

    根据给定文件的信息,本文将详细介绍如何在Java的List集合中去除重复元素的三种方法:使用for循环、使用迭代器以及利用HashSet的特性。 ### 一、使用for循环去除重复元素 这种方法的基本思想是通过双重循环来遍历...

    java集合类arraylist循环中删除特定元素的方法.docx

    - 直接在循环中删除`ArrayList`元素时,需要特别注意索引变化,避免出现越界异常。 - 使用`Iterator`删除元素是一种更安全、更推荐的做法,因为它自动处理了删除后的索引调整问题。 - 在实际开发中,建议优先考虑...

    C#查找列表中所有重复出现元素的方法

    `List&lt;T&gt;`是.NET框架提供的一个泛型类,它实现了`IList&lt;T&gt;`、`ICollection&lt;T&gt;`和`IEnumerable&lt;T&gt;`接口,提供了动态数组的功能,允许我们方便地添加、删除和查找元素。对于查找重复元素,我们通常会遍历列表,比较每...

    HashMap和List遍历方法及如何遍历删除元素总结

    HashMap和List遍历方法及如何遍历删除元素总结 HashMap和List都是Java中最常用的数据...在遍历和删除HashMap和List的元素时,需要小心地处理,以免出现问题。使用正确的遍历方法和删除元素的方法可以避免异常的出现。

    java中循环遍历删除List和Set集合中元素的方法(推荐)

    当尝试在循环内部删除元素时,Java的迭代机制无法处理这种行为,因此抛出`ConcurrentModificationException`。 **正确的遍历删除方式** 为了避免上述异常,有以下两种正确的方法来遍历并删除List和Set集合中的元素...

    list嵌套list例子

    遍历嵌套列表时,可以使用for循环,但需要注意嵌套循环的情况。如果每个子列表长度不一,可能需要使用递归或者条件判断来处理。以下是一个简单的遍历示例: ```python for sublist in nested_list: for item in ...

    删除List中的重复值

    方法一:循环元素删除 // 删除ArrayList中重复元素 public static void removeDuplicate(List list) { for ( int i = 0 ; i &lt; list.size() - 1 ; i ++ ) { for ( int j = list.size() - 1 ; j &gt; i; j -- ) {...

    c#list添加数据

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

    CSharp_List.zip_C# list_C#中list_C#中list的用法_C#怎么引用List_c# list

    在C#编程中,`List&lt;T&gt;`是.NET框架中常用的一种动态数组,它属于泛型集合,提供了丰富的功能,使得在处理一系列数据时更加灵活高效。`List&lt;T&gt;`类是`System.Collections.Generic`命名空间的一部分,它实现了`IList&lt;T&gt;`...

    C++的循环List实现.zip

    其中,`list`是STL中的一种关联容器,它是一个双向链表,提供了高效地插入和删除元素的能力。本项目将探讨如何在C++中实现一个类似于STL的循环链表。 首先,我们来看`MyList.h`这个头文件,它可能定义了`MyList`类...

    Python中list循环遍历删除数据的正确方法

    前言 初学Python,遇到过这样的问题,在遍历list的时候,删除符合条件的数据,可是总是报异常,代码如下: ...原因是在删除list中的元素后,list的实际长度变小了,但是循环次数没有减少,依然按照

    SpringBoot_Freemarker生成Word_多个表格+两层嵌套循环

    (userList是集合在dataMap中的key, user是集合中的每个元素, 类似&lt;c:forEach items='userList' var='user'&gt;), 如图: PLUS:若表格之外还有嵌套的循环,也需要用&lt;#list table as map&gt;&lt;/#list&gt;,注意这里的&lt;#list&gt;...

Global site tag (gtag.js) - Google Analytics