zoukankan      html  css  js  c++  java
  • Java自学-集合框架 遍历

    遍历ArrayList的三种方法

    步骤 1 : 用for循环遍历

    通过前面的学习,知道了可以用size()和get()分别得到大小,和获取指定位置的元素,结合for循环就可以遍历出ArrayList的内容
    用for循环遍历

    package collection;
     
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
     
    import charactor.Hero;
     
    public class TestCollection {
     
        public static void main(String[] args) {
            List<Hero> heros = new ArrayList<Hero>();
     
            // 放5个Hero进入容器
            for (int i = 0; i < 5; i++) {
                heros.add(new Hero("hero name " + i));
            }
     
            // 第一种遍历 for循环
            System.out.println("--------for 循环-------");
            for (int i = 0; i < heros.size(); i++) {
                Hero h = heros.get(i);
                System.out.println(h);
            }
     
        }
     
    }
    

    步骤 2 : 迭代器遍历

    使用迭代器Iterator遍历集合中的元素
    迭代器遍历

    package collection;
     
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
     
    import charactor.Hero;
      
    public class TestCollection {
     
        public static void main(String[] args) {
            List<Hero> heros = new ArrayList<Hero>();
             
            //放5个Hero进入容器
            for (int i = 0; i < 5; i++) {
                heros.add(new Hero("hero name " +i));
            }
             
            //第二种遍历,使用迭代器
            System.out.println("--------使用while的iterator-------");
            Iterator<Hero> it= heros.iterator();
            //从最开始的位置判断"下一个"位置是否有数据
            //如果有就通过next取出来,并且把指针向下移动
            //直到"下一个"位置没有数据
            while(it.hasNext()){
                Hero h = it.next();
                System.out.println(h);
            }
            //迭代器的for写法
            System.out.println("--------使用for的iterator-------");
            for (Iterator<Hero> iterator = heros.iterator(); iterator.hasNext();) {
                Hero hero = (Hero) iterator.next();
                System.out.println(hero);
            }
             
        }
          
    }
    

    步骤 3 : 用增强型for循环

    使用增强型for循环可以非常方便的遍历ArrayList中的元素,这是很多开发人员的首选。

    不过增强型for循环也有不足:
    无法用来进行ArrayList的初始化
    无法得知当前是第几个元素了,当需要只打印单数元素的时候,就做不到了。 必须再自定下标变量。
    用增强型for循环

    package collection;
     
    import java.util.ArrayList;
    import java.util.Iterator;
    import java.util.List;
     
    import charactor.Hero;
     
    public class TestCollection {
     
        public static void main(String[] args) {
            List<Hero> heros = new ArrayList<Hero>();
     
            // 放5个Hero进入容器
            for (int i = 0; i < 5; i++) {
                heros.add(new Hero("hero name " + i));
            }
     
            // 第三种,增强型for循环
            System.out.println("--------增强型for循环-------");
            for (Hero h : heros) {
                System.out.println(h);
            }
     
        }
     
    }
    

    练习删除ArrayList中的数据

    首先初始化一个Hero集合,里面放100个Hero对象,名称分别是从
    hero 0
    hero 1
    hero 2
    ...
    hero 99.

    通过遍历的手段,删除掉名字编号是8的倍数的对象

    答案

    package collection;
     
    import java.util.ArrayList;
    import java.util.List;
     
    import charactor.Hero;
     
    public class TestCollection {
     
        public static void main(String[] args) {
            List<Hero> heros = new ArrayList<Hero>();
     
            // 放100个Hero进入容器
            for (int i = 0; i < 100; i++) {
                heros.add(new Hero("hero name " + i));
            }
     
            //准备一个容器,专门用来装要删除的对象
            List<Hero> deletingHeros = new ArrayList<>();
     
            for (Hero h : heros) {
                int id = Integer.parseInt(h.name.substring(10));
                if (0 == id % 8)
                    deletingHeros.add(h);
            }
            for (Hero h : deletingHeros) {
                heros.remove(h);
            }
    //      heros.removeAll(deletingHeros); //直接通过removeAll删除多个Hero对象
            System.out.println(heros);
        }
     
    }
    

    不能够在使用Iterator和增强for循环遍历数据的同时,删除数据,否则会抛出ConcurrentModificationException

    解决办法,是准备一个临时容器,专门用来保存需要删除的对象。 然后再删掉

  • 相关阅读:
    js面试题
    Linux设备驱动程序 之 并发及其管理
    Linux设备驱动程序 之 read和write
    Linux设备驱动程序 之 open和release
    Linux设备驱动程序 之 字符设备的注册
    Linux设备驱动程序 之 重要数据结构
    Linux设备驱动程序 之 主次设备号
    Linux设备驱动程序 之 模块参数
    Linux设备驱动程序 之 内核符号表
    Linux设备驱动程序 之 装载和卸载模块
  • 原文地址:https://www.cnblogs.com/jeddzd/p/11926001.html
Copyright © 2011-2022 走看看