泛型 Generic和 ArrayList 的三种遍历方法

泛型 Generic和 ArrayList 的三种遍历方法

不指定泛型的容器,可以存放任何类型的元素
指定了泛型的容器,只能存放指定类型的元素以及其子类

为了不使编译器出现警告,需要前后都使用泛型,像这样:
List<Hero> genericheros = new ArrayList<Hero>();
不过JDK7提供了一个可以略微减少代码量的泛型简写方式
List<Hero> genericheros2 = new ArrayList<>();
//对于不使用泛型的容器,可以往里面放英雄,也可以往里面放物品
List heros = new ArrayList();
  
heros.add(new Hero("盖伦"));
  
//本来用于存放英雄的容器,现在也可以存放物品了
heros.add(new Item("冰杖"));
  
//对象转型会出现问题
Hero h1=  (Hero) heros.get(0);
//尤其是在容器里放的对象太多的时候,就记不清楚哪个位置放的是哪种类型的对象了
Hero h2=  (Hero) heros.get(1);
  
//引入泛型Generic
//声明容器的时候,就指定了这种容器,只能放Hero,放其他的就会出错
List<Hero> genericheros = new ArrayList<Hero>();
genericheros.add(new Hero("盖伦"));
//如果不是Hero类型,根本就放不进去
//genericheros.add(new Item("冰杖"));
  
//除此之外,还能存放Hero的子类
genericheros.add(new APHero());
 
//并且在取出数据的时候,不需要再进行转型了,因为里面肯定是放的Hero或者其子类
Hero h = genericheros.get(0);

ArrayList 的三种遍历方法

一 用for循环遍历(最简单)

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);
}

增强型for循环(推荐)

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);
}

迭代器遍历

在这里插入图片描述

   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);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值