增强型for和Iterator学习

1,增强for和对于非集合类(没有实现 Iterable接口)的数组遍历效果一样

2,对于集合类,就是隐式调用迭代器 iterator的遍历,各有各个场合

3,对于arraylist来所,由于数据结构是数据,可以获得get的索引,反而用普通循环速度更快。linkedlist这种基于链表的数据结构,就用增强for速度比较快

 List<String> list = new ArrayList<String>();
        for (int i = 0; i < 500000; i++) {
            list.add("xiaotang");
        }
 
        long start = System.currentTimeMillis();
        int size = list.size();
        String str = null;
        for (int i = 0; i < size; i++) {
            str = list.get(i);
        }
        System.out.println("for + get(i)方法: "
                + (System.currentTimeMillis() - start));
 
        long start2 = System.currentTimeMillis();
        for (String str1 : list) {
        }
        System.out.println("Iterator(foreach)方法:"
                + (System.currentTimeMillis() - start2));
View Code
   Iterator<Integer> itr = lst.iterator(); 
        while (itr.hasNext()) 
            if (itr.next() % 2 == 0) 
                itr.remove(); 
add/get/remove

4,增强for获得实例,不能再循环中删除,否则有异常,原理:foreach引用了iterator,调用hasnext和next方法,在外面remove会改变iterator的expectModeCount和list的modcount不同步),

iterator就有remove方法直接删除(expectCount会自动同步),要想添加就要用原始的for,或者迭代器的删了再加,保存平衡,foreach尽量只读

参考:https://my.oschina.net/itblog/blog/422649

以下例子证明第一点 
①     public static void removeEvensVer2(List<Integer> lst) 
    { 
        for (Integer x : lst) 
            if (x % 2 == 0) 
                lst.remove(x); 
        
        System.out.println(lst); 
    } 

②     public static void removeEvensVer3(List<Integer> lst) 
    { 
        Iterator<Integer> itr = lst.iterator(); 
        while (itr.hasNext()) 
            if (itr.next() % 2 == 0) 
                itr.remove(); 
     
        System.out.println(lst); 
    } 
View Code

5,map有4种方法,1,map.entrySet(),2,map.keySet()和map.values(),3,Iterator,4,通过keySet来便利

总结:键值都有用1,仅仅键或者值用2,删除用iterator

参考,https://www.cnblogs.com/lchzls/p/6714689.html

真正的:https://blog.csdn.net/tjcyjd/article/details/11111401

 

转载于:https://www.cnblogs.com/vhyc/p/9363652.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值