• 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()+"	"+a.getColor()+"	"+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()+"	"+a.getColor()+"	"+a.getAge());
    53         //}
    54     }
    55 
    56 }

     

    何事都只需坚持.. 难? 维熟尔。 LZL的自学历程...只需坚持
  • 相关阅读:
    经典游戏--24点--c++代码实现和总体思路(简单暴力向)
    这么多TiDB负载均衡方案总有一款适合你
    思杰( Citrix)证书的正确处置方式
    从本质彻底精通Git——4个模型1个周期1个史观1个工作流
    HttpClient客户端网络编程——高可用、高并发
    Netty之数据编码
    维吉尼亚密码加解密原理及其实现
    无网环境安装docker之--rpm
    centos7无网环境安装docker
    CentOS8.3最小化安装后安装GNome桌面
  • 原文地址:https://www.cnblogs.com/LZL-student/p/5892317.html
Copyright © 2020-2023  润新知