码迷,mamicode.com
首页 > 编程语言 > 详细

2021年1月29~30日 Java集合、迭代器、泛型

时间:2021-02-01 12:27:33      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:对象   的区别   lazy   sum   错误   nat   cti   向上转型   strong   

迭代器:

  • 迭代的过程中不能增删元素,否则会产生并发修改异常。
  • 注意 迭代 和 迭代器 的区别,迭代器 是用来 迭代 集合 的工具。

技术图片

 

  •  练习:某公司有多个人,每个人有不同数量的钱,用迭代器求出公司里所有男人钱的总数:
  • (注意:next方法做两件事:返回当前指向的元素,并指向下一个元素)
class Employee{
    String name;
    boolean isMale;
    double money;
    Employee(String name,boolean isMale,double money){
        this.name = name;
        this.isMale = isMale;
        this.money = money;
    }
}

public class Main {
    
    public static void main(String[] args){
        Collection<Employee> company = new ArrayList<Employee>();
        
        company.add(new Employee("Tom",true,500));
        company.add(new Employee("Bruce",true,40));
        company.add(new Employee("Alice",false,123));
        company.add(new Employee("Katy",false,250));
        company.add(new Employee("Eric",true,123));
        
        Iterator<Employee> it = company.iterator();
        
        double sum = 0;
        while(it.hasNext()) {
            Employee temp = it.next();//指针已移动,所以只能定义变量再次取值
            if(temp.isMale) {
                sum+=temp.money;
            }
        }
        System.out.println(sum);
        
    }
}

泛型的意义:

再多态中,我们用父类引用变量指向子类对象,但是又想使用子类中独有的方法,这就产生了类型转换异常的问题,在前面学习过一种解决类型转换异常的途径:

向下转型时先判断,如果该对象是向上转型前的类型的实例,再向下转型

Java还提供了另一种方案解决这一问题,效果是这样的:

本来你写完程序,你不知道它会出现类型转换异常,结果它跑着跑着崩了

用了泛型后,你写完程序出现类型转换的错误,编都编不过,根本没法跑

作为程序员我们肯定不希望bug出现在用户使用的过程中出现

而是希望问题在开发时就出现

 

泛型的3种情况:泛型类,泛型方法,泛型与继承、多态

泛型类:<>里定义的类型,在类里使用

泛型定义写在类名后面,泛型的标识符不一定非得是E或者T

技术图片

创建类对象时确定泛型:

技术图片

 

 注意不要按方法重载的思维理解泛型类定义,

比如不能像下面这么做

技术图片

泛型对象是可以调用Object类的方法的:

 技术图片

 

 泛型方法:

<>里定义的类型,在方法作用域里使用

技术图片

 

 继承、实现中的泛型:

 继承中的泛型:

技术图片

 

 实现中的泛型:

技术图片

 

如果泛型名和类名一样,会怎么样?

 技术图片

泛型通配符 ‘?‘:

首先明确:

ArrayList<?>不等价于ArrayList<Object>

这3个类属于同一个类的不同泛型类:ArrayList<Object>、ArrayList<Number>、ArrayList<Integer>他们之间没有继承关系

技术图片

 

hashcode与哈希表:

  • Object类的hashCode方法与地址值有关:

技术图片

 查看Object类的hashCode方法,发现没有方法体

 native表示该方法是外部定义的,C语言写的

 

2021年1月29~30日 Java集合、迭代器、泛型

标签:对象   的区别   lazy   sum   错误   nat   cti   向上转型   strong   

原文地址:https://www.cnblogs.com/lucascube/p/14347075.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!