Java学习笔记28(集合框架二:Iterator迭代器)

2018-06-18 03:53:07来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

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);
        }
    }
}

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Java基础学习(一)

下一篇:1月中旬值得一读的10本技术新书(机器学习、Java、大数据等)!