zoukankan      html  css  js  c++  java
  • 集合中迭代器的注意问题

    package cn.xiangcong;
    
    public class Student {
        // 成员变量
        private String name;
        private int age;
    
        // 构造方法
        public Student() {
            super();
        }
    
        public Student(String name, int age) {
            super();
            this.name = name;
            this.age = age;
        }
    
        // 成员方法
        // getXxx()/setXxx()
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        @Override
        public String toString() {
            return "Student [name=" + name + ", age=" + age + "]";
        }
        
    }
    package cn.xiagncong;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    /*
     * 问题1:不要多次使用it.next()方法,因为每次使用都是访问一个对象。
     */
    public class IteratorTest2 {
        public static void main(String[] args) {
            // 创建集合对象
            Collection c = new ArrayList();
    
            // 创建学生对象
            Student s1 = new Student("spark", 27);
            Student s2 = new Student("hadoop", 30);
            Student s3 = new Student("kafka", 33);
            Student s4 = new Student("flume", 25);
            Student s5 = new Student("azkaban", 22);
    
            // 把学生添加到集合中
            c.add(s1);
            c.add(s2);
            c.add(s3);
            c.add(s4);
            c.add(s5);
    
            // 遍历
            Iterator it = c.iterator();
            while (it.hasNext()) {
    //            正常情况下的遍历
    //            Student s = (Student) it.next();
    //            System.out.println(s.getName() + "---" + s.getAge());
    
    //             NoSuchElementException 不要多次使用it.next()方法。当第二次使用next()方法去区年龄的时候其实取的是第二个
    //            对象的年龄
                 System.out.println(((Student) it.next()).getName() + "---"+ ((Student) it.next()).getAge());
    
            }
            // System.out.println("----------------------------------");
    
            // for循环改写。可以改写但是不建议这么做
            // for(Iterator it = c.iterator();it.hasNext();){
            // Student s = (Student) it.next();
            // System.out.println(s.getName() + "---" + s.getAge());
            // }
        }
    }

    输出结果:

    spark---30
    kafka---25
    Exception in thread "main" java.util.NoSuchElementException
        at java.util.ArrayList$Itr.next(ArrayList.java:834)
        at cn.itcast_03.IteratorTest2.main(IteratorTest2.java:38)

    通过测试结果很容易看出来前面的名字和年龄是交叉对应的和不是一个对象对应的两个属性

  • 相关阅读:
    hdu 2544 单源最短路问题 dijkstra+堆优化模板
    CImg、libjpeg--介绍、配置(操作JPEG)
    【Android归纳】开发中应该注意的事项
    iOS測试——置换測试: Mock, Stub 和其它
    <html>
    系统吞吐量、TPS(QPS)、用户并发量、性能測试概念和公式
    hdu 1038 Biker&#39;s Trip Odometer(水题)
    java泛型
    从头认识Spring-2.1 自己主动装配(2)-byType(2)
    11.2.0.3 RAC(VCS)节点crash以及hang的问题分析
  • 原文地址:https://www.cnblogs.com/itboys/p/6144534.html
Copyright © 2011-2022 走看看