迭代器,泛型中的?,增强for循环
来源:互联网 发布:中国广电网络集团公司 编辑:程序博客网 时间:2024/06/16 18:46
集合框架:
集合本身是一个工具,在java.util的包里面,所以每次在使用的时候都需要导包.
由于集合中每个容器的数据结构各不相同,不同的容器进行向上抽取,最终就形成了这个框架,也就是collection接口.在接口中有集合框架的很多共性内容,
在API中,有更多的Collection接口的用法.
那么在Collection中,学习他,学习任何容器都要记住3点就可以很好的掌握,
首先是结构,其次是添加元素,最后是获取元素,前两者的方法和之前学的集合,数组都很类似,就不过多介绍,唯独获取方式比较特殊,下面单独介绍一下如何在Collection中获取元素.
获取集合中的元素通常就要用到迭代器,或者增强for循环来进行对其的遍历,
集合中把获取元素的方式储存在Iterator接口中,称之为迭代器:
Iterator接口
Iterator接口中常用的两种方法
hasNext()这个方法负责查找集合中是否存在元素,不管元素有多少,有几个,是什么元素,它只负责查找,如果有元素,他的返回值将会有一个boolean的变量进行判断,如果为true继续查找,如果为false,停止查找.(一般配合while循环进行使用).
nest()将查找的元素取出来,直到循环结束时候,它将停止运行,他的返回值类型与取出来的元素相匹配.
注意:
在进行集合元素取出时,如果集合中已经没有元素了,还继续使用迭代器的next方法,将会发生java.util.NoSuchElementException没有集合元素的错误.
迭代器的声明方式:
Iterator<集合中数据类型>iterator()
增强for循环
如果说在进行对集合遍历的时候不需要考虑到使用索引,那么可以用增强for循环来进行遍历
格式:
for(元素的数据类型 变量 : Collection集合or数组){
}
泛型中的?
当使用泛型类或者接口时,传递的数据中,泛型类型不确定,可以通过通配符<?>表示。但是一旦使用泛型的通配符后,只能使用Object类中的共性方法,集合中元素自身方法无法使用。
定义:(查看ArrayList的构造方法)无法在类中使用
使用:调用方法时可以给予任意类型,参照API中rraylist的构造方法.
?extendsE代表只要是E类型的子类即可
?super E代表只要是E类型的父类即可
/*
*泛型的限定
*上限限定 ? extends Animal 只能传 Animal及其子类
*下限限定 ? super Animal 只能传Animal及其父类
* 利用增强for循环进行遍历集合
*/
import java.util.ArrayList;
importjava.util.Collection;
publicclass test {
publicstaticvoidmain(String[]args) {
ArrayList<Animal>list=newArrayList<Animal>();
list.add(newAnimal());
list.add(newAnimal());
ArrayList<dog>list2=newArrayList<dog>();
list2.add(newdog());
list2.add(newdog());
ArrayList<cat>list3=newArrayList<cat>();
list3.add(newcat());
list3.add(newcat());
ArrayList<String>list4=newArrayList<String>();
list4.add("abc");
list4.add("d");
//show(list3);
//show(list2);
show(list);
}
//定义一个方法 可以遍历这几个结合,并且调用eat的方法
publicstaticvoidshow(ArrayList<?extendsAnimal>list){
for(Objectobj:list){
//强制转换,将obj强制转换成Animal类型.
Animala= (Animal)obj;
a.eat();
}
}
}
Animal类
publicclass Animal {
publicvoideat(){
System.out.println("动物会吃东西");
}
}
定义dog类,继承Animal,重写Animal的eat方法
publicclass dogextendsAnimal{
publicvoideat(){
System.out.println("狗吃肉");
}
}
定义cat类, 继承Animal,重写Animal的eat方法
publicclass catextendsAnimal {
publicvoideat(){
System.out.println("猫吃鱼");
}
}
自定义学生类:包含姓名,年龄,成绩属性.私有成员变量,生成无参,有参构造方法,生成get/set方法.创建5个学生放到ArrayList中.使用迭代器获取每个学生信息.统计总分,平均分,最高分,最低分并输出
publicclass Student {
private Stringname;
privateintage;
privatedoublescore;
public Student() {}
public Student(Stringname,intage,doublescore) {
this.name =name;
this.age =age;
this.score =score;
}
// getxxx/setxxx
}
测试类:
publicclass Test01 {
publicstaticvoid main(String[]args) {
//定义ArrayList
ArrayList<Student>students = new ArrayList<>();
//添加5个学生
students.add(new Student("张三", 20, 99));
students.add(new Student("王昭君", 21, 88));
students.add(new Student("西施", 20, 80));
students.add(new Student("杨玉环", 20, 70));
students.add(new Student("凤姐", 22, 30));
//获取迭代器
Iterator<Student>itr = students.iterator();
//定义总分
doubletotalScore = 0;
//定义最高分
doublemaxScore =students.get(0).getScore();
//定义最低分
doubleminScore =students.get(0).getScore();
//循环判断是否有下一个学生
while (itr.hasNext()) {
//使用next方法获取学生对象
Studentstudent = itr.next();
//将这个学生对象的分数添加到总分
totalScore +=student.getScore();
//判断这个学生的分数是否大于最大分数
if (maxScore <student.getScore()) {
//这个学生的分数大于最大分数.最大分数等于这个学生的分数
maxScore =student.getScore();
}elseif (minScore >student.getScore()) {
//判断这个学生的分数是否大低最大分数
//这个学生的分数小于最小分数.最小分数等于这个学生的分数
minScore =student.getScore();
}
}
//计算平均分(平均分 = 总分/人数)
doubleavgScore =totalScore / students.size();
//打印总分,最高分,最低分
System.out.println("总分 = " + totalScore +" ,平均分 = " +avgScore + " ,最高分 = " +maxScore + ",最低 = " +minScore);
}
}
- 迭代器,泛型中的?,增强for循环
- java中的增强型for循环
- java中的增强型for循环
- Java中的增强For循环
- 增强型For循环
- 增强型for循环
- 增强型for循环
- Java泛型和增强for循环
- 泛型和增强for循环
- 增强for循环和迭代器
- 增强型的for循环
- Java增强型for循环
- Java:增强型for循环,
- java 增强型 for 循环
- 集合中的集合_存储和遍历(增强型for循环和迭代器)
- 增强for循环在Map中的应用
- 增强for循环在Map中的应用
- Java中的增强for循环与iterator
- 【python】Python的zip函数
- MongoDB概述
- comparable的compareTo( )方法
- 批处理系统和分时系统的区别
- 异常
- 迭代器,泛型中的?,增强for循环
- webmagic实例
- Matplotlib 中文用户指南 3.1 pyplot 教程
- 枯燥编程加奇炫美术 —— 看育碧 Ubisoft 如何开发游戏大作
- VC6.0工程迁移到VS2010
- Node Js 实现图片上传 学习笔记
- Servlet总结一
- xUtil框架使用步骤
- 行人检测综述