`
huanhuan1022
  • 浏览: 54933 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

java list remove的问题

    博客分类:
  • java
阅读更多
import java.util.*;
public class object {
public static void main(String[] args) {
   String str1 = new String("abcde");
   String str2 = new String("abcde");
   String str3 = new String("abcde");
   String str4 = new String("abcde");
   String str5 = new String("abcde");
   List list = new ArrayList();
   list.add(str1);
   list.add(str2);
   list.add(str3);
   list.add(str4);
   list.add(str5);
   System.out.println("list.size()=" + list.size());
   for (int i = 0; i < list.size(); i++) {
    if (((String) list.get(i)).startsWith("abcde")) {
     list.remove(i);
    }
   }
   System.out.println("after remove:list.size()=" + list.size());
}
}

 

运行结果不是:

list.size()=5
after remove:list.size()=0

居然是:

list.size()=5
after remove:list.size()=2

原因:List每remove掉一个元素以后,后面的元素都会向前移动,此时如果执行i=i+1,则刚刚移过来的元素没有被读取。

解决方法:

1.倒过来遍历list

for (int i = list.size()-1; i > =0; i--) {
    if (((String) list.get(i)).startsWith("abcde")) {
     list.remove(i);
    }
}

2.每移除一个元素以后再把i移回来

for (int i = 0; i < list.size(); i++) {
    if (((String) list.get(i)).startsWith("abcde")) {
     list.remove(i);
     i=i-1;

   }
}

3.使用iterator.remove()方法删除

        for (Iterator it = list.iterator(); it.hasNext();) {
            String str =  (String)it.next();
            if (str.equals("chengang")){
                it.remove();
            }
        }

注意:在遍历list或者说在遍历集合过程中,执行了删除动作就会报错

分享到:
评论
1 楼 java_hq 2011-08-11  
哥们  你需要注意一下for循环
list.size()在for循环的过程中它是没循环一次都运行一次的
当你删除list里面的元素 list.size()值在减小而i在增加
所以就会出现
list.size()=5
after remove:list.size()=0

相关推荐

    List.removeAll() 方法的性能效率

    在Java编程语言中,`List.removeAll()`方法是一个非常实用的函数,它允许我们从列表中一次性移除所有指定元素。这个方法是集合框架的一部分,它提供了高效的方式来进行元素的删除操作。本文将深入探讨`removeAll()`...

    java list 过滤

    在Java编程中,`List`过滤是一个常见的任务,它涉及到集合操作和条件判断。当我们需要从一个`List`中筛选出满足特定条件的元素时,Java提供了多种方式来实现这一功能。这篇博客“java list 过滤”可能深入探讨了这些...

    javaList用法

    "javaList用法详解" Java 中的 List 用法是指在 Java 编程语言中使用 List 集合的方法和实现方式。List 集合是 Java 中的一种常用的集合类型,提供了许多实用的方法和实现类,下面将详细介绍 List 用法和实例。 ...

    java计算同一个list中是否有相同的值

    list.remove(j); // 移除重复项 } } if ((list2.size() + 1) &gt; 1) { // 如果有重复项 num = Math.max(num, list2.size() + 1); // 更新最大重复次数 } } System.out.println(num); if (num &gt; 1) { ...

    JAVA的LIST接口的REMOVE重载方法调用原理解析

    JAVA LIST接口的REMOVE重载方法调用原理解析 JAVA中的LIST接口提供了多个重载的REMOVE方法,分别传入参数为索引index、Object、Integer等,这些重载方法的调用原理是什么?在实际开发中,我们经常会遇到这种情况,...

    JavaList.rar_javalist

    在Java编程语言中,`List`接口是集合框架的一个重要组成部分,它代表了一种有序的、可变大小的集合。`List`接口继承自`Collection`接口,它提供了额外的功能,比如按照索引访问元素、保持元素的顺序以及允许重复元素...

    java的list取之方法

    根据提供的文件信息,标题与描述均指向了Java中List的操作方法。然而,给出的部分内容却是一段关于导入Excel文件到Web应用中的代码片段,并没有直接涉及List的具体操作方法。因此,我们将结合标题与描述,围绕Java中...

    Java list.remove( )方法注意事项

    在Java编程语言中,`List`接口是集合框架的一个重要组成部分,它提供了顺序存储和访问元素的能力。`remove()`方法是`List`接口中的一个关键操作,用于从列表中删除指定的元素或根据索引移除元素。在使用`remove()`...

    Java List集合的应用.rar

    Java List集合是Java编程语言中一个非常重要的数据结构,它属于集合框架的一部分,主要用于存储一组有序的、可重复的对象。List接口提供了许多方法,使得在处理列表数据时具有很高的灵活性和效率。在这个“Java List...

    javaList的定义和方法

    在Java编程语言中,`List`是集合框架的一部分,它是一个有序的集合,允许重复元素。`List`接口位于`java.util`包下,继承自`Collection`接口,并且实现了`Iterable`接口,使得我们可以使用增强型for循环来遍历列表。...

    javalist.zip_list集合 java

    "javalist.zip_list集合 java"这个标题暗示我们将探讨Java中的List集合以及它的应用。描述中提到“java中集合list的应用非常重要”,这确实不假,因为List在处理有序数据时具有广泛的应用场景。 List接口位于java....

    JAVA中List的增删改查

    在Java编程语言中,List接口是集合框架的重要组成部分,它代表了一个有序的元素序列,允许重复元素,并且保持插入顺序。对于初学者来说,理解如何在List中进行增删改查操作是掌握Java集合框架的基础。本文将详细介绍...

    Java-Mail-list.zip_JAVA list通讯录

    在Java编程领域,"Java-Mail-list.zip_JAVA list通讯录"是一个示例项目,它展示了如何使用Java语言来实现一个基本的通讯录系统。这个项目包含添加联系人、搜索联系人、删除联系人以及查询联系人等核心功能,是学习...

    Java List简介_动力节点Java学院整理

    Java List 是一种集合框架中的接口,它代表了一个有序的、可重复的元素序列。与数组类似,List 可以通过角标访问元素,但不同的是,List 的大小是可变的,可以在运行时动态地添加或删除元素。下面我们将详细讨论 ...

    java中List对象集合的遍历方法(三个)

    如果在遍历过程中需要移除元素,必须使用`it.remove()`,直接调用`list.remove()`会导致并发修改异常(ConcurrentModificationException)。 ### 第二种:增强型for循环(foreach) ```java for (A a : list) { /...

    java基础--list(ArrayList、LinkedList、匿名类).docx

    【Java基础——List接口详解(ArrayList、LinkedList、匿名类)】 在Java编程中,List接口是集合框架的重要组成部分,提供了有序存储元素的功能。ArrayList和LinkedList是List接口的两种主要实现,它们各有优缺点,...

    java中List的用法和实例详解

    在Java编程语言中,List接口是集合框架的重要组成部分,它属于Collection接口的子接口。List接口主要用于存储有序的、可重复的元素序列。与Set不同,List允许元素重复,并且保持插入时的顺序。本篇将详细介绍Java中...

    java ArrayList.remove()的三种错误用法以及六种正确用法详解

    在Java编程中,ArrayList是List接口的一个重要实现类,它基于数组进行操作,提供了一种高效的方式来存储和访问有序的元素。ArrayList的remove()方法是一个关键功能,用于删除列表中的元素。然而,如果不正确地使用这...

Global site tag (gtag.js) - Google Analytics