Java教程

4.30Java Iterator迭代器遍历容器元素(List/Set/Map)

本文主要是介绍4.30Java Iterator迭代器遍历容器元素(List/Set/Map),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

4.30Java Iterator迭代器遍历容器元素(List/Set/Map)

迭代器的作用

迭代器遍历List

迭代器中遍历List

可以使用for循环进行遍历

  • 先获得一个迭代器对象---在for里面

  • 获得以后直接通过hashNext方法实现遍历

iterator遍历元素的方法

首先来看看iterator的源码:

public interface Iterator<E> {
    //定义了一个hashNext的布尔量
    boolean hashNext;
    
    //定义一个next属性
    next;
    
    //定义一个remove方法
    default void remove(){
        throw new UnsupportedOperationException("remove");
    }
}
  • 通过hashNext属性可以判断有没有下一个元素

hashNext和Next组合起来使用,形成判断的闭环

List继承了Collection类,该类也实现了Iterator接口。

iterator方法帮助我们获得一个迭代器对象

Iterator帮助我们定义了迭代器里面应该有的方法

iterator遍历List:

package collection.iterator;
​
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
​
/**
 * 测试迭代器遍历List、Set、Map
 * @author Lucifer
 */
public class TestIterator {
​
    /*实现遍历List的方法---先定义方法内容*/
    public static void testIteratorList(){
​
        //方法名遵从驼峰规则
        /*要遍历List就要先有List*/
        List<String> list = new ArrayList<>();
        /*
        1.ArrayList是一个类,继承了AbstractList类
        2.AbstractList类继承了AbstractCollection
        3.AbstractList类同是实现了List接口
         */
        list.add("aa");
        list.add("bb");
        list.add("cc");
        list.add("dd");
​
        /*创建迭代器变量---循环获得对象(所以for的第一步是创建对象,循环进行判断(判断是否有下一个元素---利用iterator里面自带的属性)*/
        for (Iterator<String> iter = list.iterator(); list.iterator().hasNext();){
            //调用hashNext方法不能用iter而是用list.iterator方法
            /*用iter.next返回当前对象通过又让游标往下移动一格*/
            String temp = iter.next(); //把当前内容返回然后回到头进行判断看有没有下一个元素
            System.out.println(temp);
        }
    }
}

实现:

package collection.iterator;
​
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
​
/**
 * 测试迭代器遍历List、Set、Map
 * @author Lucifer
 */
public class TestIterator {
​
    /*实现遍历List的方法---先定义方法内容*/
    public static void testIteratorList(){
​
        //方法名遵从驼峰规则
        /*要遍历List就要先有List*/
        List<String> list = new ArrayList<>();
        /*
        1.ArrayList是一个类,继承了AbstractList类
        2.AbstractList类继承了AbstractCollection
        3.AbstractList类同是实现了List接口
         */
        list.add("aa");
        list.add("bb");
        list.add("cc");
        list.add("dd");
​
        /*创建迭代器变量---循环获得对象(所以for的第一步是创建对象,循环进行判断(判断是否有下一个元素---利用iterator里面自带的属性)*/
        for (Iterator<String> iter = list.iterator(); list.iterator().hasNext();){
            //调用hashNext方法不能用iter而是用list.iterator方法
            /*用iter.next返回当前对象通过又让游标往下移动一格*/
            String temp = iter.next(); //把当前内容返回然后回到头进行判断看有没有下一个元素
            System.out.println(temp);
        }
    }
}

迭代器中遍历Set

实现:

package collection.iterator;
​
import java.util.*;
​
/**
 * 测试迭代器iterator遍历Set
 * @author Lucifer
 */
public class TestIteratorSet {
​
    /*实现遍历Set的方法---先定义方法内容*/
    public static void testIteratorSet(){
​
        //方法名遵从驼峰规则
        /*要遍历Set就要先有Set*/
        Set<String> set = new HashSet<>();
        /*
        1.ArrayList是一个类,继承了AbstractList类
        2.AbstractList类继承了AbstractCollection
        3.AbstractList类同是实现了List接口
         */
        set.add("aa");
        set.add("bb");
        set.add("cc");
        set.add("dd");
​
        /*创建迭代器变量---循环获得对象(所以for的第一步是创建对象,循环进行判断(判断是否有下一个元素---利用iterator里面自带的属性)*/
        for (Iterator<String> iter = set.iterator(); set.iterator().hasNext();){
            //调用hashNext方法不能用iter而是用list.iterator方法
            /*用iter.next返回当前对象通过又让游标往下移动一格*/
            String temp = iter.next(); //把当前内容返回然后回到头进行判断看有没有下一个元素
            System.out.println(temp);
        }
    }
}

迭代器中遍历Map

package collection.iterator;
​
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
​
/**
 * 测试迭代器Iterator遍历Map
 * @author Lucifer
 */
public class TestIteratorMap {
​
    /*定义iterator遍历方法*/
    public static void testIteratorMap(){
​
        //这是一个类方法,通过类名.方法名调用
        Map<Integer,String> map = new HashMap<>();
        //往Map里面添加元素
        map.put(100,"aa");
        map.put(200,"bb");
        map.put(300,"cc");
​
        /*遍历Map通过节点遍历*/
        //获得一个Set
        Set<Map.Entry<Integer, String>> ss = map.entrySet(); //返回是一个set集合
        /*
        1.通过map.entrySet获得一个Set集合
        2.Set里面放置的是一个集合(Entry)
        3.在Entry集合里面防止的是泛型<Integer,String>
        <Map.Entry<Integer, String>>这个是一个键值对的泛型
         */
        //在键值对当中进行迭代器迭代
        for (Iterator<Map.Entry<Integer,String>> iter = ss.iterator(); iter.hasNext();){
            //在这个里面继续进行遍历---通过.next方法返回一个Entry
            Map.Entry<Integer,String> temp = iter.next();
            //通过temp.getKey获得键,temp.getValue获得值
            System.out.println(temp.getKey() + "---" + temp.getValue());
        }
    }
​
    /*也可以通过keySet获得键,通过键去遍历容器*/
    public static void  testIteratorMapNo2(){
​
        //这是一个类方法,通过类名.方法名调用
        Map<Integer,String> map = new HashMap<>();
        //往Map里面添加元素
        map.put(100,"aa");
        map.put(200,"bb");
        map.put(300,"cc");
​
        //首先先获得键的集合
        Set<Integer> keySet = map.keySet();
        //利用for循环通过键的值去遍历---键的类型是Integer
        for (Iterator<Integer> iter = keySet.iterator(); iter.hasNext();){
            //获得了键以后取出键
            Integer key = iter.next();
            //通过key获取---用get方法
            System.out.println(key + "---" + map.get(key));
        }
    }
}

测试类:

package collection.iterator;
​
/**
 * 测试TestIterator接口当中的方法
 * @author Lucfier
 */
public class Test {
    public static void main(String[] args) {
​
        /*类名调用方法遍历List*/
        TestIterator.testIteratorList();
​
        /*类名调用方法遍历Set*/
        TestIteratorSet.testIteratorSet();
​
        /*类名调用方法遍历Map*/
        TestIteratorMap.testIteratorMap();
        TestIteratorMap.testIteratorMapNo2();
    }
}

特点:

  • Java当中为容器提供了统一的接口iterator它可以遍历List、Map、Set

  • 方法类似,都是通过循环捕获对象进行遍历,这里要注意他的for的条件

  • 循环初始值为通过iterator方法捕获的返回的链表(List和Set)

  • 循环结束条件为iterator接口中的hasNext为null时结束

  • Map的话初始值变为iterator方法捕获的key、value值---也可以是key值然后循环

  •  

 

 

这篇关于4.30Java Iterator迭代器遍历容器元素(List/Set/Map)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!