zoukankan      html  css  js  c++  java
  • Java学习笔记28(集合框架二:Iterator迭代器)

    Iterator接口,翻译成中文是迭代器

    迭代器的概念通俗解释:

    java中有很多的集合,内部有各种存储方法,取出的方式也各不相同,是否可以有一种通用的方式来获取呢?

    这种方式类似for循环遍历,

    通用获取方式:取出元素之前判断集合中有没有这个元素,如果有,就取出来;继续判断,如果还存在那么继续取出,直到全部取出为止,这种取出就是迭代

    迭代器的实现:

    (将ArrayList集合换成其他的集合,也可以实现)

    package demo;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    public class IteratorDemo {
        public static void main(String[] args) {
            Collection<String>c1 = new ArrayList<String>();
            c1.add("abc1");
            c1.add("abc2");
            c1.add("abc3");
            c1.add("abc4");
            Iterator<String> it1 = c1.iterator();
            boolean b1 = it1.hasNext();//是否有元素可以被取出
            System.out.println(b1);//true
            //获取元素
            while(it1.hasNext()){
                String s = it1.next();
                System.out.println(s);
            }
        }
    }

    集合迭代中的转型:
    建议加入类型,但是不加入也可以执行:

    package demo;
    
    import java.util.ArrayList;
    import java.util.Collection;
    import java.util.Iterator;
    
    public class CollectionDemo {
        public static void main(String[] args) {
            //集合可以存储任意类型的对象
            //集合中,不指定存储的数据类型,也可以存储
            Collection c1 = new ArrayList();
            c1.add("abc");
            c1.add("def");
            Iterator it1 = c1.iterator();
            while(it1.hasNext()){
                //it.next获取Object类型,强制转换
                String s1 = (String)it1.next();
                System.out.println(s1.length());
            }
        }
    }

    利用迭代器的原理,在JDK1.5之后出现了增强for循环:

    增强for循环遍历数组示例:

    package demo;
    //增强for循环,有固定格式
    
    //好处:代码少了,方便遍历
    //弊端:没有索引,不能操作容器里面的元素
    public class ForEachDemo {
        public static void main(String[] args) {
            function1();
            function2();
        }
        
        public static void function1(){
            int[] arr = {3,2,5,4,8,9,6};
            //遍历输出
            for(int i :arr){
                System.out.println(i);
            }
        }
        
        public static void function2(){
            //遍历的时候,可以调用对象的方法
            String[] str1 = {"abc","def","java"};
            for(String s:str1){
                System.out.println(s);
                System.out.println(s.length());
            }
        }
    }

    增强for循环遍历集合示例:

    package demo;
    
    import java.util.ArrayList;
    
    //增强for循环,有固定格式
    public class ForEachDemo {
        public static void main(String[] args) {
            function();
        }
    
        public static void function() {
            ArrayList<String> array1 = new ArrayList<String>();
            array1.add("abcd");
            array1.add("java");
            for (String s : array1) {
                System.out.println(s);
            }
        }
    }

    迭代器并发修改异常:

    在面试中偶尔会遇到,这里做简单介绍

    package demo;
    
    import java.util.ArrayList;
    import java.util.Iterator;
    
    //迭代器的并发修改异常
    //即不允许在迭代过程中修改集合
    public class Demo {
        public static void main(String[] args) {
            ArrayList<String> list = new ArrayList<String>();
            list.add("abc1");
            list.add("abc2");
            list.add("abc3");
            list.add("abc4");
            Iterator<String> it1 = list.iterator();
            while (it1.hasNext()) {
                String s1 = it1.next();
                /*
                 * 加入这段代码则会出现异常
                 * 
                 * if(s1.equals("abc3")){ list.add("abc"); }
                 */
                System.out.println(s1);
            }
        }
    }
  • 相关阅读:
    PHP 反射 ReflectionClass
    go-字符串生成数据库字段
    grpc类型
    ubuntu安装zookeeper集群
    ubuntu安装JDK
    zookeeper分布式读写锁
    golang利用gob序列化struct对象保存到本地(转载)
    golang手动管理内存(转载)
    类json格式字符串打印
    研二寒假---关于Qt&CV曲线算法问题
  • 原文地址:https://www.cnblogs.com/xuyiqing/p/8274808.html
Copyright © 2011-2022 走看看