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)

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

  • 相关阅读:
    Css_加载样式
    Mvc4_@RenderBody()和@RenderSection()
    C#_观察者模式
    Mvc4_MvcPager 概述
    Mvc4_Area的应用
    Nginx 服务器性能参数设置
    Nginx变量的实现机制
    天下无雾
    Nginx Http框架的理解
    【转】websocket协议规范
  • 原文地址:https://www.cnblogs.com/itboys/p/6144534.html
Copyright © 2011-2022 走看看