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!!!
  • 相关阅读:
    css3中-moz、-ms、-webkit 是什么意思
    自定义AppServer
    自定义AppSession
    分离Command
    创建简单的Telnet实例
    注册表权限设置
    centos root登录password 忘记解决的方法
    ajaxFileUpload+struts2实现多文件上传
    计算机图形学(二)输出图元_6_OpenGL曲线函数_2_中点画圆算法
    linux命令的别名alias,unalias
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/14723395.html
Copyright © 2011-2022 走看看