基于java构造方法Vector遍历元素源码分析

 更新时间:2021年09月09日 17:31:53   作者:叫我王员外就行  
本篇文章是关于ava构造方法Vector源码分析系列文章,本文主要介绍了Vector遍历元素的源码分析,有需要的朋友可以借鉴参考下,希望可以有所帮助

(注意:本文基于JDK1.8)

前言

任何一个容器类对象用于持有元素后,总是需要遍历元素的,即挨个去访问每个元素1次,而遍历元素,除了常规的依赖于数组对象的下标之外,更常用的是封装好的迭代器,今天就来学习Vector中的迭代器是如何设计的,与迭代器相关的方法有:

iterator()

listIterator()

listIterator(int index)

3个Vector中的定义的方法,均会返回一个迭代器对象……简单说说这3个方法的来历

iterator()方法的来历

iterator()方法,是Vector实现的Iterable接口规范的方法,如何你直观的去看Vector的类结构,你并找不到Iterable接口的定义,你看到的应该是这样的:

public class Vector<E>
    extends AbstractList<E>
    implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
      …………省略代码…………
}

那么Iterable接口在哪里呢?没错,就在List接口中,List接口继承了Collection接口,而Collection接口则又继承了Iterable接口,因为Vector实现了List接口,所以间接获得iterator()方法的实现需求。

List接口表示具备线性表的能力、Collection接口表示具备集合的能力,而Iterable接口则表示具备可遍历的能力

List扩展了Collection的能力,而Collection又扩展了Iterable的能力,List的能力最大,且也符合这样的规范,既然作为线性表,当然应该具备Collection中的定义的能力,而既然作为集合,应该具备可遍历元素的能力。

 listIterator()与listIterator(int)方法的来历

这两个方法,则来源于Vector的父类AbstractList中的定义,只不过Vector均对其进行了重写,而AbstractList则是根据自己实现的List接口,而实现的这两个方法。话不多少,接下来看看

iterator()方法分析

    public synchronized Iterator<E> iterator() {
        return new Itr();
    }

用于返回一个迭代器对象的方法,synchronized修饰,只有获取到对象的锁的线程才能执行该方法

1、创建Itr对象

Itr是定义在Vector中的普通内部类,它产生的对象用于表示迭代器,也称为迭代器对象

2、向调用者返回迭代器对象

listIterator()方法分析

    public synchronized ListIterator<E> listIterator() {
        return new ListItr(0);
    }

用于返回一个迭代器对象的方法,此迭代器用于从第一个元素开始遍历

1、创建ListItr对象

ListItr也为Vecor中的定义的一个普通内部类,它的构造方法可以传入的一个参数,表示起始下标(从哪个元素开始)

2、向调用者返回ListItr对象

listIterator(int)方法分析

    public synchronized ListIterator<E> listIterator(int index) {
        if (index < 0 || index > elementCount)
            throw new IndexOutOfBoundsException("Index: "+index);
        return new ListItr(index);
    }

用于返回一个迭代器对象,传入的参数表示此迭代器可以从哪个元素开始

1、检查传入的下标是否合理

当传入下标小于0、或者传入的下标大于elementCount(即表示元素总数、又表示即将添加新元素的下标),则证明不合理,此处会抛出IndexOutOfBoundsException()对象

2、创建ListItr对象

利用传入的下标,将其传入到ListItr的构造方法中,创建一个指定从某个下标处开始的迭代器对象

3、返回迭代器对象ListItr

总结

迭代器操作,全部依赖Itr类、以及ListItr类产生的对象,真真的迭代器对象就是它们,所以下一篇将直接分析,Itr类与ListItr类的所有方法

以上就是基于java构造方法Vector遍历元素源码分析的详细内容,更多关于java构造方法Vector的资料请关注脚本之家其它相关文章!

相关文章

  • SpringBoot使用Micrometer实现度量和监控

    SpringBoot使用Micrometer实现度量和监控

    在构建和维护现代应用程序时,度量和监控是至关重要的,它们可以帮助您了解应用程序的性能、稳定性和可用性,本文将介绍如何在Spring Boot应用程序中使用Micrometer进行度量和监控,需要的朋友可以参考下
    2023-10-10
  • springboot整合easy-es实现数据的增删改查的示例代码

    springboot整合easy-es实现数据的增删改查的示例代码

    Easy-Es是一款基于ElasticSearch官方提供的RestHighLevelClient打造的低码开发框架,本文主要介绍了springboot整合easy-es实现数据的增删改查的示例代码,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Spring中HandlerMethod类源码详细解析

    Spring中HandlerMethod类源码详细解析

    这篇文章主要介绍了Spring中HandlerMethod类源码详细解析,HandlerMethod类用于封装控制器方法信息,包含类信息、方法Method对象、参数、注解等信息,具体的接口请求是可以根据封装的信息调用具体的方法来执行业务逻辑,需要的朋友可以参考下
    2023-11-11
  • 使用Spring MVC实现双向数据绑定

    使用Spring MVC实现双向数据绑定

    Spring MVC是一个广泛用于构建Java Web应用程序的框架,它提供了众多功能,包括双向数据绑定,在这篇文章中,我们将向Java新手介绍如何使用Spring MVC实现双向数据绑定,以及为什么这个特性如此重要,需要的朋友可以参考下
    2024-01-01
  • Java如何将任意类型的Object对象转换为相应的实体对象

    Java如何将任意类型的Object对象转换为相应的实体对象

    这篇文章主要介绍了Java如何将任意类型的Object对象转换为相应的实体对象问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • Spring实战之让Bean获取Spring容器操作示例

    Spring实战之让Bean获取Spring容器操作示例

    这篇文章主要介绍了Spring实战之让Bean获取Spring容器操作,结合实例形式分析了Bean获取Spring容器的相关原理、实现方法及操作注意事项,需要的朋友可以参考下
    2019-11-11
  • Java开发岗位面试被问到嵌套类怎么办

    Java开发岗位面试被问到嵌套类怎么办

    本篇文章主要介绍了深入理解Java嵌套类和内部类,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-07-07
  • java实现背单词程序

    java实现背单词程序

    这篇文章主要为大家详细介绍了java实现背单词程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • HashMap在JDK7与JDK8中的实现过程解析

    HashMap在JDK7与JDK8中的实现过程解析

    这几天学习了HashMap的底层实现,但是发现好几个版本的,代码不一,很多文章都是旧版本JDK1.6.JDK1.7的。现在我来分析下JDK7与JDK8中HashMap的实现过程
    2021-09-09
  • Gson之toJson和fromJson方法的具体使用

    Gson之toJson和fromJson方法的具体使用

    Gson是Google的一个开源项目,可以将Java对象转换成JSON,也可能将JSON转换成Java对象。本文就详细的介绍了toJson和fromJson方法的具体使用,感兴趣的可以了解一下
    2021-11-11

最新评论