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

作者:叫我王员外就行 时间:2023-11-25 05:21:40 

(注意:本文基于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类的所有方法

来源:https://blog.csdn.net/cadi2011/article/details/116809430

标签:java,构造方法,Vector,遍历元素
0
投稿

猜你喜欢

  • 基于Spring Mvc实现的Excel文件上传下载示例

    2022-01-22 02:02:56
  • java和matlab画多边形闭合折线图示例讲解

    2021-06-23 08:39:15
  • Springboot 整合RabbitMq(用心看完这一篇就够了)

    2023-11-23 05:27:17
  • 解析C# 程序结构

    2021-11-15 05:22:59
  • Java进阶知识之反射的概念与获取方法

    2023-12-09 19:09:14
  • springboot+swagger2.10.5+mybatis-plus 入门详解

    2023-03-15 01:58:38
  • Groovy动态语言使用教程简介

    2022-04-28 15:05:54
  • C#使用log4net记录日志的方法步骤

    2021-07-07 18:14:55
  • Flutter 实现虎牙/斗鱼 弹幕功能

    2023-07-11 04:11:11
  • 浅谈java面向对象中四种权限

    2023-03-09 18:43:46
  • java实体类转成map的实现

    2022-03-25 08:56:04
  • Android App中使用Gallery制作幻灯片播放效果

    2022-04-03 21:53:37
  • Java springboot yaml语法注解

    2023-06-17 08:13:35
  • Spring Boot热加载jar实现动态插件的思路

    2021-09-25 16:37:55
  • Android实现根据评分添加星级条

    2021-10-30 13:19:57
  • Android自定义指示器时间轴效果实例代码详解

    2023-06-13 01:06:33
  • Android开发实现的标准体重计算器功能示例

    2023-01-19 02:56:48
  • spring使用OXM进行对象XML映射解析

    2022-11-11 16:05:19
  • 详解Java线程-守护线程与用户线程

    2023-11-25 00:17:29
  • 轻松实现Rxjava定时器功能

    2022-03-12 06:23:27
  • asp之家 软件编程 m.aspxhome.com