基于java构造方法Vector遍历元素源码分析
(注意:本文基于JDK1.8)
前言
任何一个容器类对象用于持有元素后,总是需要遍历元素的,即挨个去访问每个元素1次,而遍历元素,除了常规的依赖于数组对象的下标之外,更常用的是封装好的迭代器,今天就来学习Vector中的迭代器是如何设计的,与迭代器相关的方法有:
iterator()
listIterator()
listIterator(int index)
3个Vector中的定义的方法,均会返回一个迭代器对象……简单说说这3个方法的来历
iterator()方法的来历
iterator()方法,是Vector实现的Iterable接口规范的方法,如何你直观的去看Vector的类结构,你并找不到Iterable接口的定义,你看到的应该是这样的:
public class Vectorextends AbstractList implements List , 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 Iteratoriterator() {return new Itr(); }
用于返回一个迭代器对象的方法,synchronized修饰,只有获取到对象的锁的线程才能执行该方法
1、创建Itr对象
Itr是定义在Vector中的普通内部类,它产生的对象用于表示迭代器,也称为迭代器对象
2、向调用者返回迭代器对象
listIterator()方法分析
public synchronized ListIteratorlistIterator() {return new ListItr(0); }
用于返回一个迭代器对象的方法,此迭代器用于从第一个元素开始遍历
1、创建ListItr对象
ListItr也为Vecor中的定义的一个普通内部类,它的构造方法可以传入的一个参数,表示起始下标(从哪个元素开始)
2、向调用者返回ListItr对象
listIterator(int)方法分析
public synchronized ListIteratorlistIterator(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遍历元素源码分析的详细内容,更多关于java构造方法Vector的资料请关注脚本之家其它相关文章!
推荐阅读
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 基于微信小程序带后端ssm接口小区物业管理平台设计
- 基于|基于 antd 风格的 element-table + pagination 的二次封装
- 事件代理
- Java|Java OpenCV图像处理之SIFT角点检测详解
- java中如何实现重建二叉树
- 数组常用方法一
- 【Hadoop踩雷】Mac下安装Hadoop3以及Java版本问题
- 基于爱,才会有“愿望”当“要求”。2017.8.12
- Java|Java基础——数组