Java集合框架迭代器Iterator实现原理解析

使用循环遍历集合

普通for循环

for(int i=0;i<10;i++){}

增强for循环

for(String str:list){}

什么是迭代器Iterator

Iterator是Java中的一个接口,核心作用就是用来遍历容器的元素,当容器实现了Iterator接口后,可以通过调用Iterator()方法获取一个Iterator对象

为啥是调用容器里面的Iterator方法呢?

因为容器的实现有多种,不同的容器遍历规则不一样,比如:ArrayList、LinkedList、HashSet、TreeSet等,所以设计了Iterator接口,让容器本身去实现这个接口,实现里面的方法,从而让开发人员不用关心容器的遍历机制,直接使用对应的方法即可

三个核心方法

  • boolean hashNext():用于判断Iterator内是否有下个元素,如果有则返回true,没有则false
  • Object next():返回Iterator的下一个元素,同时指针也会向后移动一位
  • void remove():删除指针的上一个元素(建议使用自己容器里的方法)
  public static void testSet() {
    Set<String> set = new HashSet<>();
    set.add("jack");
    set.add("tom");
    set.add("marry");
    set.add("tony");
    set.add("jack");
    Iterator<String> iterator = set.iterator();
    while (iterator.hasNext()) {
      String str = iterator.next();
      System.out.println(str);
    }
  }

  public static void testList() {
    List<String> list = new ArrayList<>();
    list.add("jack");
    list.add("tom");
    list.add("mary");
    list.add("tim");
    list.add("tony");
    list.add("eric");
    list.add("jack");
    Iterator<String> iterator = list.iterator();
    while (iterator.hasNext()) {
      String str = iterator.next();
      System.out.println(str);
    }
  }

迭代器和for循环对比

  • for循环适合顺序访问,或者通过下标进行访问
  • 迭代器适合链式结构
  • 最终要看使用场景,性能会有轻微差别,但是可以忽略

注意事项

迭代出的对象是引用的拷贝,如果修改迭代中的元素,那么就是修改容器对象的本身!!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 浅谈java Iterator.remove()方法的用法(详解)

    实例如下: @Test public void tt(){ List<String> list = new ArrayList<String>(); list.add( "0" ); list.add( "1" ); list.add( "2" ); list.add( "3" ); list.add( "4" ); list.add( "5" ); list.a

  • Java使用Iterator迭代器遍历集合数据的方法小结

    本文实例讲述了Java使用Iterator迭代器遍历集合数据的方法.分享给大家供大家参考,具体如下: 1.使用迭代器遍历ArrayList集合 package com.jredu.oopch07; import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class Ch05 { public static void main(String[] args) { // TODO Auto

  • java集合_浅谈Iterable和Iterator的区别

    1). Iterator是迭代器类,而Iterable是为了只要实现该接口就可以使用foreach,进行迭代. 2). Iterable中封装了Iterator接口,只要实现了Iterable接口的类,就可以使用Iterator迭代器了. 3). 集合Collection.List.Set都是Iterable的实现类,所以他们及其他们的子类都可以使用foreach进行迭代. 4). Iterator中和核心的方法next(),hasnext(),remove(),都是依赖当前位置,如果这些集合直

  • java Iterator接口和LIstIterator接口分析

    java  Iterator接口和LIstIterator接口分析 目录 1.Iterator接口 2.ListIterator 3.Iterator和ListIterator的区别 正文 在继续看ArrayList源码之前,先了解Iterator接口和ListIterator接口,下篇文章详细讲解ArrayList是如何实现它们的. 我们知道,接口只是一种规范,当继承接口并实现其中的方法时,要遵循接口对方法的说明. 1.Iterator接口 Iterator接口取代了Java集合框架中的Enu

  • Java集合使用 Iterator 删除元素

    这篇文章主要介绍了Java集合使用 Iterator 删除元素,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 针对常见的数据集合,比如 ArrayList 列表,对其进行遍历,删除其中符合条件的某个元素,使用 iterator 迭代器进行迭代,代码如下: public class PracticeController { public static void main(String[] args) { List<String> list =

  • Java如何使用Iterator迭代器删除集合重复选项

    这篇文章主要介绍了Java如何使用Iterator迭代器删除集合重复选项,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 结合迭代器Iterator删除集合中重复的选项,这种方法有一个缺点就是最终的结果不一定是有序的. public class test { public static void main(String[] args) { // 创建一个集合 ArrayList list = new ArrayList<>(); // 往集合中

  • java中Iterator和ListIterator实例详解

    Iterator和ListIterator的作用范围以及关系: (1) Iterator可以用于迭接口List的实现ArrayList,LinkedList以及Map等. (2) ListIterator顾名思义,就是用于迭代List实现ArrayList,LinkedList. (3) 从源码或API文档中可以看出,Iterator为ListIterator的父类. public interface ListIterator<E> extends Iterator<E> { //

  • 详解Java中Iterable与Iterator用法

    在Java中,我们可以对List集合进行如下几种方式的遍历: List<Integer> list = new ArrayList<>(); list.add(5); list.add(23); list.add(42); for (int i = 0; i < list.size(); i++) { System.out.print(list.get(i) + ","); } Iterator it = list.iterator(); while (i

  • Java集合框架迭代器Iterator实现原理解析

    使用循环遍历集合 普通for循环 for(int i=0;i<10;i++){} 增强for循环 for(String str:list){} 什么是迭代器Iterator Iterator是Java中的一个接口,核心作用就是用来遍历容器的元素,当容器实现了Iterator接口后,可以通过调用Iterator()方法获取一个Iterator对象 为啥是调用容器里面的Iterator方法呢? 因为容器的实现有多种,不同的容器遍历规则不一样,比如:ArrayList.LinkedList.HashS

  • MyBatis框架迭代器模式实现原理解析

    迭代器模式,一直没用过,也不会用.恰巧MyBatis框架中也使用到了迭代器模式,而且看起来还比较简单,在以后的工作中,若有需要咱们可模仿它的套路来干. 直接上代码 import java.util.Iterator; /** * @author Clinton Begin */ public class PropertyTokenizer implements Iterator<PropertyTokenizer> { private String name; private final St

  • JAVA集合框架Map特性及实例解析

    一 Map特性: 1 Map提供一种映射关系,其中的元素是以键值对(key-value)的形式存储的,能够实现根据key快速查找value: 2 Map中键值对以Entry类型的对象实例形式存在: 3 键,即key不可重复,但是value值可以: 4 每个键最多只能映射一个值: 5 Map接口提供了分别返回key值集合.value值集合以及Entry(键值对)集合的方法: 6 Map支持泛型,形式如:Map<K,V> 二 HashMap类: 1 HashMap是Map的一个重要实现类,也是最常

  • Java RPC框架熔断降级机制原理解析

    熔断与降级 为什么在RPC环节中有熔断以及降级的需求,详细的原因这里不多解释,从网上搜索一张图做示意. 熔断 我理解熔段主要解决如下几个问题: 当所依赖的对象不稳定时,能够起到快速失败的目的快速失败后,能够根据一定的算法动态试探所依赖对象是否恢复 比如产品详细页获取产品的好评总数时,由于后端服务异常导致客户端每次都需要等到超时.如果短时间内服务不能恢复,那么这段时间内的所有请求时间都将是最大的超时时间,这类消费时间又得不到正确结果的现象是不能容忍的.所以遇到这类情况,就需要根据一定的算法判定服务

  • Java集合框架中迭代器Iterator解析

    Java里面的数组数据可以通过索引来获取,那么对象呢?也是通过索引吗?今天我们就来分析一下Java集合中获取集合对象的方法迭代-Iterator. 本篇文章主要分析一下Java集合框架中的迭代器部分,Iterator,该源码分析基于JDK1.8,分析工具,AndroidStudio,文章分析不足之处,还请指正! 一.简介 我们常常使用 JDK 提供的迭代接口进行 Java 集合的迭代. Iterator iterator = list.iterator(); while(iterator.has

  • Java中迭代器Iterator的使用解析

    什么是迭代器 在Java中,有很多的数据容器,对于这些的操作有很多的共性.Java采用了迭代器来为各种容器提供了公共的操作接口.这样使得对容器的遍历操作与其具体的底层实现相隔离,达到解耦的效果. 在Iterator接口中定义了三个方法: Java集合类中Map接口下的相关类并没有像Collection接口的相关类一样实现get()方法,因此在要实现遍历输出的场景中没法直接用get()方法来取得对象中的数据,但Java本身提供了另一种遍历数据的方法,即用Iterator迭代器,虽然Iterator

  • Lambda表达式和Java集合框架

    本文github地址 Java8为容器新增一些有用的方法,这些方法有些是为完善原有功能,有些是为引入函数式编程(Lambda表达式),学习和使用这些方法有助于我们写出更加简洁有效的代码.本文分别以ArrayList和HashMap为例,讲解Java8集合框架(Java Collections Framework)中新加入方法的使用. 前言 我们先从最熟悉的Java集合框架(Java Collections Framework, JCF)开始说起. 为引入Lambda表达式,Java8新增了jav

  • JAVA集合框架专题

    一.Java集合框架概述 集合可以看作是一种容器,用来存储对象信息.所有集合类都位于java.util包下,但支持多线程的集合类位于java.util.concurrent包下. 数组与集合的区别如下: (1)数组长度不可变化而且无法保存具有映射关系的数据:集合类用于保存数量不确定的数据,以及保存具有映射关系的数据. (2)数组元素既可以是基本类型的值,也可以是对象:集合只能保存对象. Java集合类主要由两个根接口Collection和Map派生出来的,Collection派生出了三个子接口:

  • Java集合框架超详细小结

    目录 一:Collection集合 1.1集合概述: 1.2集合架构 1.3Collection集合常用方法 二:迭代器Iterator 2.1Iterator接口 2.2Iterator的实现原理: 2.3增强for() 2.4迭代器注意事项 三:泛型 3.1泛型概述 3.2泛型的优缺点 3.3泛型的定义与使用 泛型方法 泛型接口 3.4泛型的通配符 通配符高级使用-----受限泛型 四:Java常见数据结构 4.1栈 4.2队列 4.3数组 4.4链表 4.5红黑树 五:List集合体系 5

  • Java 集合框架掌握 Map 和 Set 的使用(内含哈希表源码解读及面试常考题)

    目录 1. 搜索 1.1 场景引入 1.2 模型 2. Map 2.1 关于 Map 的介绍 2.2 关于 Map.Entry<K, V> 的介绍 2.3 Map 的常用方法说明 2.4 关于 HashMap 的介绍 2.5 关于 TreeMap 的介绍 2.6 HashMap 和 TreeMap 的区别 2.7 Map 使用示例代码 3. Set 3.1 关于 Set 的介绍 3.1 Set 的常用方法说明 3.3 关于 TreeSet 的介绍 3.4 关于 HashSet 的介绍 3.5

随机推荐