Iterator iterator():迭代器,集合的专用遍历方式
  A:Object next():获取元素,并移动到下一个位置。
    有时候会出现这样的错误: NoSuchElementException:没有这样的元素,因为你已经找到最后了。
  B:boolean hasNext():如果仍有元素可以迭代,则返回 true。

  问题1:能用while循环写这个程序,我能不能用for循环呢?
    for(Iterator it = c.iterator();it.hasNext();){
        Student s = (Student) it.next();
        System.out.println(s.getName() + "---" + s.getAge());
    }
  可以,并且for循环的效率高,因为这个循环用完后,it就被丢弃了,省内存。但是for循环语句不大明朗

  问题2:不要多次使用it.next()方法,

      因为每次使用都是访问一个对象。

迭代器的使用:

 import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class IteratorDemo {
public static void main(String[] args) {
// 创建集合对象
Collection c = new ArrayList(); // 创建并添加元素
// String s = "hello";
// c.add(s);
c.add("hello");
c.add("world");
c.add("java"); // Iterator iterator():迭代器,集合的专用遍历方式
Iterator it = c.iterator(); // 实际返回的肯定是子类对象,这里是多态 // Object obj = it.next();
// System.out.println(obj);
// System.out.println(it.next());
// System.out.println(it.next());
// System.out.println(it.next());
// System.out.println(it.next());
// 最后一个不应该写,所以,我们应该在每次获取前,如果有一个判断就好了
// 判断是否有下一个元素,有就获取,没有就不搭理它 // if (it.hasNext()) {
// System.out.println(it.next());
// }
// if (it.hasNext()) {
// System.out.println(it.next());
// }
// if (it.hasNext()) {
// System.out.println(it.next());
// }
// if (it.hasNext()) {
// System.out.println(it.next());
// }
// if (it.hasNext()) {
// System.out.println(it.next());
// } // 最终版代码
while (it.hasNext()) {
// System.out.println(it.next());
String s = (String) it.next();
System.out.println(s);
}
}
}

用迭代器来写重新写上个遍历

 package zl_ObjectTest1;

 import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator; /*
用集合存储5个动物对象,并把动物对象进行遍历,用迭代器遍历 */
public class AnimalDemo { public static void main(String[] args) {
//创建集合对象
Collection c = new ArrayList(); //创建动物对象 Animal a1 = new Animal("猫", "虎纹",2);
Animal a2 = new Animal("荷兰猪", "粉色",1);
Animal a3 = new Animal("老鹰", "黑白",4);
Animal a4 = new Animal("鹦鹉", "五颜六色",2);
Animal a5 = new Animal("警犬", "黑色", 3); //把对象放进去集合中
c.add(a1);
c.add(a2);
c.add(a3);
c.add(a4);
c.add(a5); // Iterator iterator():迭代器,集合的专用遍历方式
Iterator it = c.iterator();
while (it.hasNext()){
//System.out.println(it.next()); //向下转型
Animal a = (Animal)it.next();
System.out.println(a.getName()+"\t"+a.getColor()+"\t"+a.getAge()); // NoSuchElementException 不要多次使用it.next()方法
// System.out.println(((Student) it.next()).getName() + "---"
// + ((Student) it.next()).getAge());
// 错误的用法
//((Student) it.next()).getName()拿的是第一个的名字,
//((Student) it.next()).getAge()拿的是第二个的年龄...
} //改为for循环方法来遍历:
//for(Iterator it = c.iterator();it.hasNext();){
//Animal a = (Animal)it.next();
//System.out.println(a.getName()+"\t"+a.getColor()+"\t"+a.getAge());
//}
} }

java 15-4 集合的专用遍历工具 迭代器的更多相关文章

  1. java 15 -3 集合的遍历的练习

    练习:用集合存储5个动物对象,并把动物对象进行遍历. 分析: A:创建动物类 a:无参构造方法 b:有参构造方法 c:get.set方法 B:创建集合对象 a:Collection animal = ...

  2. java 15 - 8 集合框架(并发修改异常的产生原因以及解决方案)

    问题?   我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现.  面试题: Concu ...

  3. java 15 - 9 集合框架之 栈、队列、数组 和 链表

  4. Java基础知识强化之集合框架笔记07:Collection集合的遍历之迭代器遍历

    1. Collection的迭代器: Iterator iterator():迭代器,集合的专用遍历方式 2. 代码示例: package cn.itcast_03; import java.util ...

  5. Java之集合的遍历与迭代器

    集合的遍历 依次获取集合中的每一个元素 将集合转换成数组,遍历数组 //取出所有的学号, 迭代之后显示学号为1004-1009 Object[] c=map.keySet().toArray();// ...

  6. Java基础知识强化之集合框架笔记34:List练习之集合的嵌套遍历

    1. 需求: 我们班有学生,每一个学生是不是一个对象.所以我们可以使用一个集合表示我们班级的学生.ArrayList<Student> 但是呢,我们旁边是不是还有班级,每个班级是不是也是一 ...

  7. java学习笔记 --- 集合

    1.定义:集合是一种容器,专门用来存储对象 数组和集合的区别?   A:长度区别  数组的长度固定 集合长度可变 B:内容不同  数组存储的是同一种类型的元素  而集合可以存储不同类型的元素  C:元 ...

  8. Java中的集合详解及代码测试

    1:对象数组 (1)数组既可以存储基本数据类型,也可以存储引用类型.它存储引用类型的时候的数组就叫对象数组. 2:集合(Collection) (1)集合的由来 我们学习的是Java -- 面向对象 ...

  9. JAVA中集合转数组遍历

    JAVA中集合的遍历的一种方法时集合转数组遍历,也是就调用Collection中的toArray(). 代码: public static void main(String[] args) {     ...

随机推荐

  1. 再说Play!framework http://hsfgo.iteye.com/blog/806974

    这篇帖子的内容我本来想发到 http://www.iteye.com/topic/806660这里的主贴里去的,想挽回被隐藏的命运,但我写完本贴的内容,却发现为时已晚.好吧,我承认,上一个贴的标题容易 ...

  2. 实验12:Problem H: 整型数组运算符重载

    Home Web Board ProblemSet Standing Status Statistics   Problem H: 整型数组运算符重载 Problem H: 整型数组运算符重载 Tim ...

  3. 解决SharePoint 2013 designer workflow 在发布的报错“负载平衡没有设置”The workflow files were saved but cannot be run.

    原因是app management service没有设置好,在管理中心把他删掉,重新建一个就可以了 Provision App Management Service In SharePoint 20 ...

  4. sublime text 3 安装

    sublime text 3 下载地址 http://www.sublimetext.com/3 下载windows版本,然后解压缩就可以直接使用了,不错不错哦, 为了更加便捷的管理,安装 packa ...

  5. 2015年第4本(英文第3本):Godfather教父

    2015年的第4本书,第3本英文书. 书名:Godfather ,中文书名<教父> 作者: Mario Puzo 单词数:17万 词汇量:1万 首万词不重复词数:2200(这个我不太相信) ...

  6. UITabBar,UINavigationBar的布局和隐藏问题

    ---恢复内容开始--- 1. 前言 UITabBar,UINavigationBar非常的好用,但是毕竟是系统自带的,不受自己完全掌握,对于布局和隐藏会有一些问题,现在就来谈谈我的想法和一些问题. ...

  7. CSS 类选择器(四)

    一.类选择器 类选择用使用"."(英文点号)进行标识,后面紧跟类名 如: .red{color:red;} 类样式可以应用于文档中的多个元素,这体现了CSS代码的可重用性,帮助用户 ...

  8. iOS开发笔记2:单例模式(singleton)

    每一个app有且仅有一个UIApplication,类似UIApplication“ [UIApplication sharedApplication]”这种一个类有且仅有唯一实例的设计即单例模式. ...

  9. 怎样在VS2010中打开VS2012的项目

    VS2012中对C#的支持度非常好,不管是编写方便程度(不需要插件就能高亮代码及代码自动提示功能),还对MFC的一些功能优化很多. 我们可以修改两个工程文件来把VS2012的工程文件一直到VS2010 ...

  10. linux ssh更换默认的22端口

    1.修改配置文件:/etc/ssh/sshd_config 2.先将Port 22 前面的 # 号去掉,并另起一行.如定义SSH端口号为26611 ,则输入 3.修改完毕后,重启SSH服务,并退出当前 ...