泛型概述以及集合的增强for

泛型

概述

  1. JDK5.0之后出现的新特性:泛型

  2. 泛型这种语法机制,只在程序的编译阶段起作用,只是给编译器参考的。(运行阶段泛型没用)

  3. 优点:

    1. 集合中存储的元素类型统一了。
    2. 从集合中取出的元素类型是泛型指定的类型,不需要进行大量的“向下转型”!
  4. 缺点:

    导致集合中存储的元素缺乏多样性

    大多数业务中,集合中元素的类型还是统一的。所以这种泛型特性被大家所认可。

    只是方便了一种类型 如果需要调用子类特有的方法还是需要转型的。

        List<Animal> list = new ArrayList<Animal>();

        //使用泛型List<Animal>之后,表示list集合中只允许存储Animal类型的数据。
        //list.add("ada");
        Cat cat = new Cat();
        Bird bird = new Bird();

        //添加对象
        list.add(cat);
        list.add(bird);

        Iterator<Animal> it = list.iterator();

        while (it.hasNext()){
            Animal a = it.next();
            a.move();
            if(a instanceof Cat){
                ((Cat) a).catchMouse();
            }else if (a instanceof Bird){
                ((Bird) a).fly();
            }
        }

自动类型推断机制(钻石表达式)

//ArrayList<这里的类型会自动推断>(),需要JDK8
        //自动类型推断,钻石表达式
        List<Animal> list = new ArrayList<>();

        list.add(new Animal());
        list.add(new Cat());
        list.add(new Bird());

        Iterator<Animal> it = list.iterator();
        while (it.hasNext()){
            Animal a = it.next();
            a.move();
        }

自定义泛型

用户可以自定义泛型

​ 自定义泛型的时候,<>中的只是一个标识符,可以随便写。

​ java源代码中经常出现的是和

​ E是element首字母。 T是Type单词首字母。

public class GenericTest03<asdklfhagasldfj> {
    public void doSome(asdklfhagasldfj a){
        System.out.println(a);
    }

    public static void main(String[] args) {
        GenericTest03<String> gt = new GenericTest03<>();

        gt.doSome("45654");

        GenericTest03<Integer> gt2 = new GenericTest03<>();
        gt2.doSome(100);
        //gt2.doSome("asdf");//类型不匹配
        MyIterator<String> mI = new MyIterator<>();
        String s = mI.get();

        
    }

}

class MyIterator<T> {
    public T get(){
        return null;
    }
}

foreach遍历

List<String> list = new ArrayList<>();
        list.add("1123");
        list.add("1123");
        list.add("1123");
        list.add("1123");
        list.add("1123");
        list.add("1123");

        for (String s : list) {
            System.out.println(s);
        }

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值