Java自学-集合框架 遍历

家住魔仙堡 提交于 2019-11-25 17:03:02

遍历ArrayList的三种方法

步骤 1 : 用for循环遍历

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

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的初始化
无法得知当前是第几个元素了,当需要只打印单数元素的时候,就做不到了。 必须再自定下标变量。

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

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!