基于java构造方法Vector查找元素源码分析
作者:叫我王员外就行 发布时间:2023-11-29 04:33:30
(注意:本文基于JDK1.8)
前言
元素在存储到内存中,当我们需要使用在内存中存储的元素,这就涉及到在内存中查找元素,今天一起学习Vector提供了哪些查找元素的方法
包括有获取一个元素的方法,查找元素的下标的方法,检查是否包含某个元素的方法,一起逐个学习一下吧……(本文不涉及迭代器中的查找元素,以及遍历元素,迭代器将在单独的文章中总结)
get(int)方法分析
public synchronized E get(int index) {
if (index >= elementCount)
throw new ArrayIndexOutOfBoundsException(index);
return elementData(index);
}
用于获取指定下标处的元素对象,传入的参数index表示指定的下标,当然只有获得对象锁的线程才能执行此方法
1、检查下标index是否合法
同样当index大于等于elementCount值,说明不合法,此处会抛出ArrayIndexOutOfBoundsException对象,告知用户错误原因,elementCount在Vector中有两个作用,一个是作为即将添加的下标,另外一个是作为Vector对象实际持有的元素总数
2、获取元素
获取元素仍然使用的是elementData()方法,它可以返回某个下标处的元素对象
3、向调用者返回元素对象
contains(Object)方法分析
public boolean contains(Object o) {
return indexOf(o, 0) >= 0;
}
用于检查Vector中是否存在某个元素对象
1、先调用indexOf()方法获取到某个元素的下标
2、比较获取到的元素是否大于等于0,如果元素存在,indexOf()一定会返回一个大于等于0的数字
3、将比较结果返回给调用者
如果你留心,你会发现contains()方法并没有使用synchronized修饰
containsAll()方法分析
public synchronized boolean containsAll(Collection<?> c) {
return super.containsAll(c);
}
用于检查是否包含某个指定的Collection中的所有元素的方法,依赖于父类的containsAll()方法
indexOf(Object)方法分析
public int indexOf(Object o) {
return indexOf(o, 0);
}
用于检查某个元素对象在Vector对象持有的数组对象中的下标,传入参数o为元素对象
1、实际调用另一个重载的indexOf()方法
2、向调用者返回结果,即元素的下标
indexOf(Object,index)方法分析
public synchronized int indexOf(Object o, int index) {
if (o == null) {
for (int i = index ; i < elementCount ; i++)
if (elementData[i]==null)
return i;
} else {
for (int i = index ; i < elementCount ; i++)
if (o.equals(elementData[i]))
return i;
}
return -1;
}
用于获得元素的下标,第一个参数o表示查找的元素对象,第二个参数index表示从哪个下标开始查找元素对象的下标……
1、当元素对象为null时
从指定的下标index处开始,遍历到elementCount前的所有元素,如果与null相同,则返回下标值
2、当元素对象不是null时
使用对象的equals()方法进行比较,当相等时,返回遍历过程中的下标值
3、如果没有在指定范围内找到匹配的元素对象,则向调用者返回-1
lastIndexOf(Object)方法分析
public synchronized int lastIndexOf(Object o) {
return lastIndexOf(o, elementCount-1);
}
从最后一个元素开始查找,一直到第一个元素,同样返回元素对象的下标
1、实际调用重载的lastIndexOf(Object,int)方法
2、向调用者返回元素的下标
elementAt(int)方法分析
public synchronized E elementAt(int index) {
if (index >= elementCount) {
throw new ArrayIndexOutOfBoundsException(index + " >= " + elementCount);
}
return elementData(index);
}
用于查找某个下标处的元素,synchronized修饰,同一时刻只有获得对象锁的线程,才能执行该方法,传入的参数index表示指定的下标
1、检查下标是否合理
只有小于elementCount的下标才是合法下标,其它情况会以ArrayIndexOutOfBoundsException告知调用者
2、查找到元素
这是通过elementData()方法实现的
3、向调用者返回元素对象
firstElement()方法分析
public synchronized E firstElement() {
if (elementCount == 0) {
throw new NoSuchElementException();
}
return elementData(0);
}
用于查找Vector中存储的第一个元素
1、检查元素数量
当elementCount等于0,说明没有元素,此时抛出NoSuchElementException对象
2、查找到具体的元素
同样通过elementData()方法获取到,elementData()方法接受的参数为元素下标值
3、向调用者返回元素对象
lastElement()方法分析
public synchronized E lastElement() {
if (elementCount == 0) {
throw new NoSuchElementException();
}
return elementData(elementCount - 1);
}
用于返回Vector中存储的最后一个元素,同步方法,保证共享变量elementData、elementCount的线程安全
1、检查元素数量
同样为0,表示没有元素,同样抛出NoSuchElementException对象,以告知用户,并没有元素
2、查找到最后一个元素
使用elementData()方法,只需传入最后一个元素的下标值即可,elementCount - 1 即为最后一个元素的下标
3、向调用者返回元素对象
elementData(int)方法分析
E elementData(int index) {
return (E) elementData[index];
}
用于返回指定下标处的元素对象,传入参数为int,表示下标
1、通过下标访问数组中的元素
elementData是Vector对象持有的一个数组对象,该数组对象实际负责保存元素对象(引用),所以只需通过下标访问elementData中的元素即可
2、向调用者返回元素对象
来源:https://blog.csdn.net/cadi2011/article/details/116546014


猜你喜欢
- 目录Sonar概述一、 搭建sona服务二、idea配置三、 配置maven的setting.xml文件四、idea中 mvn sonar:
- 一、什么是抽象工厂模式为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。抽象工厂模式是所有形态的工厂模式中最为抽象和最具
- 背景最近好几个项目在运行过程中客户都提出文件上传大小的限制能否设置的大一些,用户经常需要上传好几个G的资料文件,如图纸,视频等,并且需要在上
- 需求: 给定一个URL地址, 例如: http://www.cncounter.com/tools/shorturl.php, 解析对应的I
- 前言多数据源的事务处理是个老生常谈的话题,跨两个数据源的事务管理也算是分布式事务的范畴,在同一个JVM里处理多数据源的事务,比较经典的处理方
- logback输出日志屏蔽quartz的debug等级日志在一个spring的老项目中,使用了logback来作为日志管理,logback.
- SqlMapConfig.xml的约束,也就是Mybatis主配置文件的约束<?xml version="1.0"
- spring-mybatis获取mapper方式汇总项目背景:pojo下面有一个user实体类Dao包下面写了usermapper.xml
- maven3 安装:安装 Maven 之前要求先确定你的 JDK 已经安装配置完成。Maven是 Apache 下的一个项目,目前最新版本是
- 条件:1、android:ellipsize=”marquee”2、TextView必须单行显示,即内容必须超出TextView
- JPA连接到数据库,调用存储过程,这样的需求很常见。本文就针对这一点,讲述如何使用spring Data JPA调用存储过程的方法。1、存储
- 一、简介Android的消息机制主要是指Handler的运行机制,那么什么是Handler的运行机制那?通俗的来讲就是,使用Handler将
- Idea2020.2创建JavaWeb的方式略有改动,以下做个记录,大家可以参考下,对以后的工作有所帮助!1.创建项目不再是Java Ent
- Java 本身就自带 JS 引擎,自从 Java 1.6 开始就支持了,愈来愈好。我对 js 比较熟悉,因此有个大胆的想法,为什么不用自带
- spring-MVC实现简单的登录功能,供大家参考,具体内容如下今天我学习了spring-MVC实现简单的登录功能,本篇博客就讲解如何使用s
- 如下所示:JSONArray jsonArray1 = jsonObject.getJSONArray("result"
- 1. 概述官方JavaDocsApi: javax.swing.JTextAreaJTextArea,文本区域。JTextArea 用来编辑
- 一、选择结构大纲if单选择结构if双选择结构if多选择结构嵌套的if结构switch多选择结构二、if单选择结构我们很多时候需要去判断一个东
- 1.新建springBoot项目在前面有两种方式2.加入thymeleaf模板引擎SpringBoot推荐使用thymeleaf模板引擎语法
- 最近在学习springmvc,今天把springmvc 参数绑定给整理一下,也算个学习笔记吧!@RequestParam 绑定单个请求Req