zoukankan      html  css  js  c++  java
  • 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值然后循环

    •  

     

     

    It's a lonely road!!!
  • 相关阅读:
    [saiku] 系统登录成功后查询Cubes
    216. Combination Sum III
    215. Kth Largest Element in an Array
    214. Shortest Palindrome
    213. House Robber II
    212. Word Search II
    211. Add and Search Word
    210. Course Schedule II
    分硬币问题
    开始学习Python
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14723395.html
Copyright © 2011-2022 走看看