`
qtlkw
  • 浏览: 299818 次
  • 性别: 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不会。
分享到:
评论

相关推荐

    二十三种设计模式【PDF版】

    使用类再生的两个方式:组合(new)和继承(extends),这个已经在 thinking in java中提到过. 设计模式之 Proxy(代理) 以 Jive 为例,剖析代理模式在用户级别授权机制上的应用 设计模式之 Facade(门面?) 可扩展的使用...

    Android 开发技巧

    4.5.2、menu实现的两种方法 58 4.5.3、自定义MENU背景 62 4.5.4、触发menu 64 4.5.5、Context Menu和Options Menu菜单的区别 64 4.5.6、Context menus for expandable lists 64 4.6、LISTVIEW 66 4.6.1、ListView...

    Android开发资料合集-World版!

    4.5.2、menu实现的两种方法 58 4.5.3、自定义MENU背景 62 4.5.4、触发menu 64 4.5.5、Context Menu和Options Menu菜单的区别 64 4.5.6、Context menus for expandable lists 64 4.6、LISTVIEW 66 4.6.1、ListView...

    Hibernate中文API大全

    换句话说,两个人可能重名,但是两个Person对象应该包含两个独立的Name对象,只不过这两个Name对象具有“同样”的值。 组件的值可以为空,其定义如下。 每当Hibernate重新加载一个包含组件的对象,如果该组件的所有...

    50个必备的实用jQuery代码段

    25. 如何使用jQuery来检测右键和左键的鼠标单击两种情况: 7 26. 如何显示或是删除input域中的默认值 7 27. 如何在一段时间之后自动隐藏或关闭元素(支持1.4版本): 7 28. 如何把已创建的元素动态地添加到DOM中: 8...

    jQuery完全实例.rar

    意味着,每次执行传递进来的函数时,函数中的this关键字都指向一个不同的DOM元素(每次都是一个不同的匹配元素)。 而且,在每次执行函数时,都会给函数传递一个表示作为执行环境的元素在匹配的元素集合中所处位置...

    html入门到放弃笔记

    作用:设置同一行文字内的不同样式 9、行内元素 与 块级元素 按照元素们的表现形式来分类,分为 行内元素 和 块级元素1、行内元素 在一行内允许显示多个元素的,称为 "行内元素" span,i,b,s,u,sup,sub 作用:...

    《数据结构 1800题》

    11. 顺序存储方式的优点是存储密度大,且插入、删除运算效率高。( )【上海海运学院 1999 一、1(1分)】 12. 数据结构的基本操作的设置的最重要的准则是,实现应用程序与存储结构的独立。( ) 【华南理工大学 2002...

    2009 达内Unix学习笔记

    须两个都删除才算删除。 ln -s file1 file1.sln 创建软链接。可跨系统操作,冲破操作权限;也是快捷方式。 八、时间显示 date 显示时间,精确到秒 用法 date [-u] mmddHHMM[[cc]yy][.SS] date [-u] [+format] ...

    java 混淆工具,不可逆 jocky 也许是最好的了

    &lt;pathelement location="bin"&gt;&lt;/pathelement&gt; ${jocky.jar}" level="${jocky.scramble.level}"&gt; ${jocky.output.dir}"&gt; ${jocky.output.dir}/bin"&gt; ${jocky.output.dir}/bin"&gt; ${jocky.output.dir}"&gt; ${ant....

    joc eclipse plugin

    &lt;pathelement location=\"bin\"&gt;&lt;/pathelement&gt; ${jocky.jar}\" level=\"${jocky.scramble.level}\"&gt; ${jocky.output.dir}\"&gt; ${jocky.output.dir}/bin\"&gt; ${jocky.output.dir}/bin\"&gt; ${jocky.output....

    jocky 混肴编译rar包(ant和插件俩个版本)

    7 &lt;pathelement location="bin"&gt;&lt;/pathelement&gt; 8 9 &lt;target name="init"&gt; 10 ${jocky.jar}" level="${jocky.scramble.level}"&gt; 11 ${jocky.output.dir}"&gt; 12 ${jocky.output.dir}/bin"&gt; 13 14 ...

    Hibernate注释大全收藏

    EJB支持3种类型的继承。 • Table per Class Strategy: the &lt;union-class&gt; element in Hibernate 每个类一张表 • Single Table per Class Hierarchy Strategy: the &lt;subclass&gt; element in Hibernate 每个类层次...

Global site tag (gtag.js) - Google Analytics