java 15-4 集合的专用遍历工具 迭代器

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()方法,

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

迭代器的使用:

 1 import java.util.ArrayList;
 2 import java.util.Collection;
 3 import java.util.Iterator;
 4 public class IteratorDemo {
 5 public static void main(String[] args) {
 6 // 创建集合对象
 7 Collection c = new ArrayList();
 8
 9 // 创建并添加元素
10 // String s = "hello";
11 // c.add(s);
12 c.add("hello");
13 c.add("world");
14 c.add("java");
15
16 // Iterator iterator():迭代器,集合的专用遍历方式
17 Iterator it = c.iterator(); // 实际返回的肯定是子类对象,这里是多态
18
19 // Object obj = it.next();
20 // System.out.println(obj);
21 // System.out.println(it.next());
22 // System.out.println(it.next());
23 // System.out.println(it.next());
24 // System.out.println(it.next());
25 // 最后一个不应该写,所以,我们应该在每次获取前,如果有一个判断就好了
26 // 判断是否有下一个元素,有就获取,没有就不搭理它
27
28 // if (it.hasNext()) {
29 // System.out.println(it.next());
30 // }
31 // if (it.hasNext()) {
32 // System.out.println(it.next());
33 // }
34 // if (it.hasNext()) {
35 // System.out.println(it.next());
36 // }
37 // if (it.hasNext()) {
38 // System.out.println(it.next());
39 // }
40 // if (it.hasNext()) {
41 // System.out.println(it.next());
42 // }
43
44 // 最终版代码
45 while (it.hasNext()) {
46 // System.out.println(it.next());
47 String s = (String) it.next();
48 System.out.println(s);
49 }
50 }
51 }

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

 1 package zl_ObjectTest1;
 2
 3 import java.util.ArrayList;
 4 import java.util.Collection;
 5 import java.util.Iterator;
 6
 7 /*
 8      用集合存储5个动物对象,并把动物对象进行遍历,用迭代器遍历
 9
10  */
11 public class AnimalDemo {
12
13     public static void main(String[] args) {
14         //创建集合对象
15         Collection c = new ArrayList();
16
17         //创建动物对象
18
19         Animal a1 = new Animal("猫", "虎纹",2);
20         Animal a2 = new Animal("荷兰猪", "粉色",1);
21         Animal a3 = new Animal("老鹰", "黑白",4);
22         Animal a4 = new Animal("鹦鹉", "五颜六色",2);
23         Animal a5 = new Animal("警犬", "黑色", 3);
24
25         //把对象放进去集合中
26         c.add(a1);
27         c.add(a2);
28         c.add(a3);
29         c.add(a4);
30         c.add(a5);
31
32         // Iterator iterator():迭代器,集合的专用遍历方式
33         Iterator it = c.iterator();
34         while (it.hasNext()){
35             //System.out.println(it.next());
36
37             //向下转型
38             Animal a = (Animal)it.next();
39             System.out.println(a.getName()+"\t"+a.getColor()+"\t"+a.getAge());
40
41             // NoSuchElementException 不要多次使用it.next()方法
42             // System.out.println(((Student) it.next()).getName() + "---"
43             // + ((Student) it.next()).getAge());
44             // 错误的用法
45             //((Student) it.next()).getName()拿的是第一个的名字,
46             //((Student) it.next()).getAge()拿的是第二个的年龄...
47         }
48
49         //改为for循环方法来遍历:
50         //for(Iterator it = c.iterator();it.hasNext();){
51             //Animal a = (Animal)it.next();
52             //System.out.println(a.getName()+"\t"+a.getColor()+"\t"+a.getAge());
53         //}
54     }
55
56 }
时间: 2024-10-07 16:27:58

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

java----数据结构与算法----集合元素的遍历:迭代器-------->JavaAPI:java.util.Iterator+java.util.ListIterator

概述: 迭代器用于集合元素的遍历 迭代器有两种,分别是Iterator和ListIterator Iterator可以用于任何类型集合的遍历 ListIterator只能用于List集合的遍历 ListIterator接口继承了Iterator接口,所以前者拥有后者所定义的所有成员函数,同时,ListIterator还添加了一些具有List集合特性的操作函数,如按照索引访问集合元素.替换/添加集合元素等等 java.util.Iterator /** * @author chen * @date

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

练习:用集合存储5个动物对象,并把动物对象进行遍历. 分析: A:创建动物类 a:无参构造方法 b:有参构造方法 c:get.set方法 B:创建集合对象 a:Collection animal = new ArraryList(); C:创建动物对象 b:5种动物,随意想 D:把动物对象添加进集合中 c:添加进animal中 E:把集合转换成数组 d:Object[] toArray():把集合转成数组,可以实现集合的遍历 F:遍历数组 动物类: 1 package zl_ObjectTest

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

问题?   我有一个集合,如下,请问,我想判断里面有没有"world"这个元素,如果有,我就添加一个"javaee"元素,请写代码实现.  面试题: ConcurrentModificationException: 当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常.  产生的原因:  迭代器是依赖于集合而存在的,在判断成功后,集合的中新添加了元素,而迭代器却不知道,迭代器的内容不发生改变.所以就报错了,这个错叫并发修改异常.  其实这个问题描述的是:迭代器

java中map集合两种遍历方法

1.声明一个map: Map map = new HashMap(); 2.向map中放值,注意:map是key-value的形式存放的.如: map.put("sa","dd"); 3.从map中取值:String str = map.get("sa").toString();结果是:str = "dd"; 4.遍历一个map,从中取得key 和value JDK1.5 Map m = new HashMap(); for

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

Java笔记(15):集合框架(01)

1.对象数组的概述和使用 1 package cn.itcast_01; 2 3 public class Student { 4 // 成员变量 5 private String name; 6 private int age; 7 8 // 构造方法 9 public Student() { 10 super(); 11 } 12 13 public Student(String name, int age) { 14 super(); 15 this.name = name; 16 thi

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

1. Collection的迭代器: 1 Iterator iterator():迭代器,集合的专用遍历方式 2. 代码示例: package cn.itcast_03; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; /* * Iterator iterator():迭代器,集合的专用遍历方式 * Iterator(迭代器): * Object next():获取元素,并移动

集合框架(集合的遍历之集合转数组遍历)

Collection接口成员方法 Object[] toArray() 把集合转成数组,可以实现集合的遍历 Iterator iterator() 迭代器,集合的专用遍历方式  package cn.itcast_01; import java.util.ArrayList; import java.util.Collection; /*  * 集合的遍历.其实就是依次获取集合中的每一个元素.  *   * Object[] toArray():把集合转成数组,可以实现集合的遍历  */ pub

集合框架(集合的遍历之迭代器遍历)

Iterator iterator() 迭代器,集合的专用遍历方式 package cn.itcast_03; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; /*  *  * .    * .    * .(  */ public class IteratorDemo { public static void main(String[] args) { // 创建集合对象 C