`
qtlkw
  • 浏览: 308489 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

List删除element两种方式的不同

    博客分类:
  • JAVA
 
阅读更多
public class DateUtilTest {
    public void testDeleteElement(List<String> list) throws Exception{
        for (int i=list.size()-1;i>=0;i--) {
            if(list.get(i).equals("5")){
                list.remove(i);
                continue;
            }

            if(i%1000 == 0){
                Thread.sleep(100);
                System.out.println("Current Thread is " + Thread.currentThread().getName());
            }
        }

        System.out.println(list.toString());
    }

    public void testDeleteElementWithIterator(List<String> list) throws Exception{
        Iterator<String> iterator = list.iterator();
        int i=0;
        while(iterator.hasNext()){
            if(iterator.next().equals("5")){
                iterator.remove();
            }
            if(i%1000 == 0){
                Thread.sleep(100);
                System.out.println("Current Thread is " + Thread.currentThread().getName());
            }
            i++;
        }

        System.out.println(list.toString());
    }

    public static void main(String[] args) throws Exception{
        DateUtilTest test = new DateUtilTest();
        List<String> list = test.init();

        Thread t1 = new Thread(
                new Runnable() {
                    @Override
                    public void run() {
                        try{
                            test.testDeleteElementWithIterator(list);
                            System.out.println("Thread1 is running");
                        }catch(Throwable t){
                            t.printStackTrace();
                        }

                    }
                }, "thread-1"
        );

        Thread t2 = new Thread(
                new Runnable() {
                    @Override
                    public void run() {
                        try{
                            test.testDeleteElementWithIterator(list);
                            System.out.println("Thread2 is running");
                        }catch(Throwable t){
                            t.printStackTrace();
                        }
                    }
                }, "thread-2"
        );

        t1.start();
        t2.start();
    }

    public List<String> init(){
        List<String> list = new ArrayList<>();
        list.add("1");
        list.add("2");
        list.add("3");
        list.add("4");
        list.add("5");
        list.add("5");
        list.add("6");
        list.add("7");
        list.add("8");
        list.add("9");

        for(int i=10; i< 100000; i++){
            list.add(i + "");
        }

        return list;
    }
}

用iterator会报ConcurrentModificationException异常在并发的时候,用index不会。
分享到:
评论

相关推荐

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

    在两个List中找到相同的元素,但它们的值不同。这需要我们遍历两个List,比较每个元素的值。我们可以创建一个辅助函数来检查元素是否被编辑: ```java public boolean isElementEdited(Object oldElement, Object ...

    Scala的List类方法整合

    在Scala编程语言中,`List` 类是处理有序集合的一种常见方式。本文将详细介绍 `List` 类中的多种方法及其用途,帮助开发者更好地理解和使用这些功能。 #### 1. `def + (elem: A): List[A]` 此方法用于向列表的末尾...

    解决element-ui里的下拉多选框 el-select 时,默认值不可删除问题

    总结来说,本文主要解决了在element-ui的el-select组件中设置不可删除默认选项的问题,并提供了四种可能的解决思路。其中,使用Vue指令和CSS样式隐藏关闭按钮是相对简单和推荐的方法,既能够有效禁止删除操作,又...

    list嵌套list例子

    在Python编程语言中,列表(list)是一种非常重要的数据结构,它可以存储任意类型的对象,包括数字、字符串,甚至是其他列表。当我们谈论“list嵌套list”时,这意味着在一个列表内部包含了一个或多个列表,这样的...

    C#List集合分组winform把List分组

    List是C#中一种非常实用的数据结构,它提供了动态数组的功能,允许我们在运行时添加、删除或修改元素。当需要对这些数据进行分组和筛选时,C#提供了Linq(Language Integrated Query,语言集成查询)这一强大的工具...

    Java 数组转list.docx

    Java 数组转 List Java 数组转换为 List 是 Java 编程中一个常见的操作。List 是 Java 中的一种集合类型,用于存储多个...Java 数组转换为 List 是 Java 编程中一个常见的操作,两种常见的方法可以满足不同的需求。

    Android List删除重复数据

    在本文中,我们将介绍四种不同的方法来删除 Android List 中的重复数据。 方法一:通过循环进行删除 该方法使用双重循环来删除重复数据。外层循环遍历列表,内层循环从后向前遍历列表,比较每个元素是否相等,如果...

    C++中list用法

    在C++标准模板库(STL)中,`list`是一种双向链表容器。它主要用于存储数据元素,并且能够高效地进行插入和删除操作。与`vector`或`deque`等其他序列容器相比,`list`在内存上不连续存储其元素,而是通过指针链接来...

    JavaList.rar_javalist

    总之,`Java List`是编程中不可或缺的数据结构,它提供了一种灵活的方式来存储和操作有序集合。通过选择合适的`List`实现(如`ArrayList`或`LinkedList`),并熟练掌握其各种方法,你可以在实际项目中有效地管理数据...

    数据结构 线性表 的创建,插入两种,删除三种

    线性表是一种常见的数据结构,它由相同类型元素的有序序列组成,允许在表的任何位置进行插入和删除操作。本篇文章将深入探讨如何在C++环境下实现线性表的创建、插入和删除操作。 一、线性表的创建 线性表的创建...

    python的list用法.doc

    Python的list是编程语言中非常基础且重要的数据结构,它是一种有序的集合,可以容纳不同类型的元素,如整数、浮点数、字符串甚至其他列表。以下是对标题和描述中涉及的Python list用法的详细解释: 1. **定义list**...

    C++中list的用法举例

    在C++标准库中,`list`是一种双向链表容器,它允许在其两端进行高效的插入和删除操作。与`vector`不同,`list`在内存中不是连续存储的,这使得它在执行插入和删除操作时具有更高的效率。但是,由于链表的特性,`list...

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

    在Java中,遍历List并移动元素通常有两种主要方式:迭代器(Iterator)和增强for循环(foreach)。以下是这两种方法的详细说明: 1. 迭代器(Iterator): 迭代器是Java集合框架提供的一种统一的遍历方式,它可以...

    Python中列表list以及list与数组array的相互转换实现方法

    ### Python中的列表(List)及其与数组(Array)的相互...通过上述介绍的方法,我们可以轻松地在这两种数据结构之间进行转换,以满足不同的需求场景。希望这些知识点能够帮助读者更好地理解和使用Python中的列表和数组。

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

    ArrayList和LinkedList是List接口的两种主要实现,它们各有优缺点,适用于不同的场景。此外,匿名类的概念在Java中用于简化代码结构,尤其是在实现接口时。 1. **List接口** List接口继承自Set接口,它不仅提供了...

    Java集合Collection、List、Set、Map使用详解

    Java集合框架支持两种类型的排序:自然排序和定制排序。自然排序是指元素自身具备比较性,如String和Integer。定制排序则通过Comparator接口实现,可以自定义比较规则。 - 对于List,可以通过`Collections.sort...

    【IT十八掌徐培成】Java基础第10天-04.List-迭代器-对象等价性.zip

    3. **对象等价性**:在Java中,对象等价性分为两种:引用等价性和逻辑等价性。引用等价性是指两个对象是否指向内存中的同一个位置,即它们的引用是否相同。而逻辑等价性关注的是对象的内容是否相同,即使它们在内存...

    详解Java如何在Array和List之间进行转换.rar

    在Java编程语言中,Array(数组)和List是两种常用的数据结构,它们各自有各自的特性和应用场景。然而,在实际开发中,我们常常需要在数组和列表之间进行转换,以适应不同的需求。本篇将深入探讨Java中如何实现Array...

    list map相关用法实例-流氓版

    在Java编程语言中,`List`、`Map`是两种非常重要的数据结构,它们在处理序列数据和键值对数据时发挥着关键作用。这里我们将深入探讨`ArrayList`、`Vector`、`HashMap`和`Hashtable`这四种数据结构的用法以及多种遍历...

Global site tag (gtag.js) - Google Analytics