zoukankan      html  css  js  c++  java
  • java之集合Collection详解之3

    package cn.itcast_03;
    
    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.itcast_03;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    /*
     * 练习:用集合存储5个学生对象,并把学生对象进行遍历。用迭代器遍历。
     * 
     * 注意:
     *      A:自己的类名不要和我们学习的要使用的API中的类名相同。
     *      B:复制代码的时候,很容易把那个类所在的包也导入过来,容易出现不能理解的问题。
     */
    public class IteratorTest {
        public static void main(String[] args) {
            // 创建集合对象
            Collection c = new ArrayList();
    
            // 创建学生对象
            Student s1 = new Student("林青霞", 27);
            Student s2 = new Student("风清扬", 30);
            Student s3 = new Student("令狐冲", 33);
            Student s4 = new Student("武鑫", 25);
            Student s5 = new Student("刘晓曲", 22);
    
            // 把学生添加到集合中
            c.add(s1);
            c.add(s2);
            c.add(s3);
            c.add(s4);
            c.add(s5);
    
            // 遍历
            Iterator it = c.iterator();
            while (it.hasNext()) {
                // System.out.println(it.next());
                Student s = (Student) it.next();
                System.out.println(s.getName() + "---" + s.getAge());
            }
        }
    }
    
    package cn.itcast_03;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    /*
     * 问题1:能用while循环写这个程序,我能不能用for循环呢?
     * 问题2:不要多次使用it.next()方法,因为每次使用都是访问一个对象。
     */
    public class IteratorTest2 {
        public static void main(String[] args) {
            // 创建集合对象
            Collection c = new ArrayList();
    
            // 创建学生对象
            Student s1 = new Student("林青霞", 27);
            Student s2 = new Student("风清扬", 30);
            Student s3 = new Student("令狐冲", 33);
            Student s4 = new Student("武鑫", 25);
            Student s5 = new Student("刘晓曲", 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()方法
                // 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());
            // }
        }
    }
    
    package cn.itcast_03;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    /*
     * Iterator iterator():迭代器,集合的专用遍历方式
     *      Object next():获取元素,并移动到下一个位置。
     *          NoSuchElementException:没有这样的元素,因为你已经找到最后了。
     *      boolean hasNext():如果仍有元素可以迭代,则返回 true。(
     */
    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);
            }
        }
    }
    

    迭代器源码如下:

    public interface Inteator {
        boolean hasNext();
        Object next(); 
    }
    
    public interface Iterable {
        Iterator iterator();
    }
    
    public interface Collection extends Iterable {
        Iterator iterator();
    }
    
    public interface List extends Collection {
        Iterator iterator();
    }
    
    public class ArrayList implements List {
        public Iterator iterator() {
            return new Itr();
        }
    
        private class Itr implements Iterator {
            public boolean hasNext() {}
            public Object next(){} 
        }
    }
    
    
    Collection c = new ArrayList();
    c.add("hello");
    c.add("world");
    c.add("java");
    Iterator it = c.iterator();  //new Itr();
    while(it.hasNext()) {
        String s = (String)it.next();
        System.out.println(s);
    }

    版权声明:本文为小平果原创文章,转载请注明:http://blog.csdn.net/i10630226

  • 相关阅读:
    正则二三事
    docker elasticsearch 5.6.13 安装ik分词器
    centos docker 防火墙设置(多个ip之间互相访问)
    ElasticSearch结构化搜索和全文搜索
    Jest — ElasticSearch Java 客户端
    提高redis cluster集群的安全性,增加密码验证
    spring boot 设置 gzip 压缩
    centos 7磁盘空间满了导致redis cluster问题和kafka的问题
    SpringBoot之MySQL数据的丢失的元凶--事务(转)
    mysql mycat 1.6.6.1-release 批量 insert 数据丢失问题(续)
  • 原文地址:https://www.cnblogs.com/dingxiaoyue/p/4948254.html
Copyright © 2011-2022 走看看