Java 之 Vector 集合
一、构造方法
Vector():构造一个空向量,使其内部数据数组的大小为 10,其标准容量增量为零。
Vector(int initialCapacity) :使用指定的初始容量和等于零的容量增量构造一个空向量
Vector(int initialCapacity, int capacityIncrement):使用指定的初始容量和容量增量构造一个空的向量
Vector(Collection<? extends E> c) :构造一个包含指定 collection 中的元素的向量,这些元素按其 collection 的迭代器返回元素的顺序排列。
源码跟踪:
1、先看无参的构造方法:
2、有一个 int 参数的构造方法
3、有两个 int参数的构造方法
总结:
从上面的三个方法中可以看出,如果调用无参的构造方法,默认初始化的长度为10的数组,默认增量为0。
当使用一个参数时,可以为其指定初始化容量。
当使用两个参数的方法时,不仅仅可以指定初始化容量,还可以指定增量。
二、常用方法
1、add(E e) 方法
源码跟踪(JDK1.8):
源码跟踪(JDK1.9):
总结:
当调用 add(E e) 方法时,会调用第二张图的 add 方法,其中会检验长度是否够,如果不够,会调用图三的 grow 方法,grow 方法中调用了图四的 newCapacity 扩容方法,如果你手动指定了capacityIncrement的值,那么可以按照你指定增量进行扩容。如果没有默认值为0,会扩容为原来的2倍。
2、add(int index,Object e)方法
源码跟踪(JDK1.8):
源码跟踪(JDK1.9):
总结:
可以看出,当调用add(index,Object) 方法后,实际上是调用的 insert 方法,首先进行了index的校验,然后是数组长度的校验,然后进行数据的插入。
3、remove(int index) 方法
源码跟踪(JDK1.8):
总结:根据索引删除一个元素,会先进行索引的校验,然后判断需要挪动的元素的个数;如果为0个,不需要执行操作,节省时间,如果不为0,再移动数组。
4、remove(Object) 方法
源码跟踪(JDK1.8):
总结:
当根据一个元素值删除时,会先去查找该值所在的索引,如果能够找到,在根据索引进行删除。
5、indexOf(Object obj) 与 indexOf(Object obj, int index) 方法
源码跟踪(JDK1.8):
总结:
查询元素位置时,对元素进行分情况讨论,① 是null;② 不是 null。然后进行查找,第二个参数为指定开始查找的索引,如果不指定,默认从0开始查找。
6、set(int index, Object obj) 方法
源码跟踪(JDK1.8):
总结:
根据索引赋值时,首先进行索引的校验,然后把新值填充到指定索引的位置。
Java 之 Vector 集合的更多相关文章
- Java基础之集合框架——使用集合Vector<>挑选演员(TryVector)
控制台程序. public class Person implements Comparable<Person> { // Constructor public Person(String ...
- java基础31 List集合下的Vector集合
单例集合体系: ---------| collection 单例集合的根接口--------------| List 如果实现了list接口的集合类,具备的特点:有序,可重复 注:集合 ...
- 【Java面试题】54 去掉一个Vector集合中重复的元素
在Java中去掉一个 Vector 集合中重复的元素 1)通过Vector.contains()方法判断是否包含该元素,如果没有包含就添加到新的集合当中,适用于数据较小的情况下. import jav ...
- Java基础之 集合体系结构(Collection、List、ArrayList、LinkedList、Vector)
Java基础之 集合体系结构详细笔记(Collection.List.ArrayList.LinkedList.Vector) 集合是JavaSE的重要组成部分,其与数据结构的知识密切相联,集合体系就 ...
- Java中的集合List、ArrayList、Vector、Stack(三)
List接口 List集合代表一个有序集合,集合中每一个元素都有其对应的顺序索引.List集合容许使用重复元素,可以通过索引来访问指定位置的集合对象. ArrayList和Vector实现类 Arra ...
- java:容器/集合Collection(List(ArrayList,LinkedList,Vector),Set(HashSet(LinkedHashSet),TreeSet))
/** * Collection接口 不唯一,无序 * 常用的方法: * add(Object e) 确保此 collection 包含指定的元素(可选操作). * size():获取集合中元素的个 ...
- 黑马程序员——JAVA基础之Vector集合
------- android培训.java培训.期待与您交流! ---------- 基本已被淘汰 枚举就是Vector特有的取出方式.枚举和迭代器很像.其实枚举和迭代是一样的. 因为枚举的名称 ...
- Java中vector的使用详解
Vector 可实现自动增长的对象数组. java.util.vector提供了向量类(vector)以实现类似动态数组的功能.在Java语言中没有指针的概念,但如果正确灵活地使用指针又确实可以大大提 ...
- Java基础之集合框架——使用堆栈Stack<>对象模拟发牌(TryDeal)
控制台程序. public enum Rank { TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, A ...
随机推荐
- 201871010123-吴丽丽《面向对象程序设计(java)》第二周学习总结
201871010123-吴丽丽<面向对象程序设计(java)>第二周学习总结 项目 这个作业属于哪个课程 h ...
- docker 持久化存储
1.data Volume mysql5.7:dockerfile FROM debian:stretch-slim # add our user and group first to make s ...
- 【Spring Data JPA篇】JPA的底层原理(二)
一.接口继承结构 二.底层原理
- maven warnning 'build.plugins.plugin.version' is missing
裝完maven后,package或clean时出错:[WARN] [WARN] Some problems were encountered while building the effective ...
- Laravel 推荐-基础入门+实战+拓展视频教程
1.laravel基础 1.Composer:类库管理神器 - Laravel的安装和配置 2.路由:地址和方法的小媒人 - 基础路由 3.控制器:管家婆 - 基础用法 4.视图:最终结果输出 5.b ...
- [C/C++]大小端字节序转换程序
计算机数据存储有两种字节优先顺序:高位字节优先(称为大端模式)和低位字节优先(称为小端模式). 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿 ...
- 支持TV远程控制的WIN10PEX64_17763网络版by双心
支持TV远程控制的WIN10PEX64_17763网络版by双心 用slore大神的wimbuilder2,基于cn_windows_10_enterprise_ltsc_2019_x64_dvd_9 ...
- Linux性能优化实战学习笔记:第十三讲
问题1:性能工具版本太低,导致指标不全 解决方案1: 这是使用 CentOS 的同学普遍碰到的问题.在文章中,我的pidstat 输出里有一个 %wait 指标,代表进程等待 CPU 的时间百分比, ...
- [LeetCode] 477. Total Hamming Distance 全部汉明距离
The Hamming distance between two integers is the number of positions at which the corresponding bits ...
- GreenPlum 大数据平台--segment 失效问题恢复《二》(全部segment宕机情况下)
01,情况描述 主Segment和它的镜像都宕掉.导致了greenplum数据库不可用状态 02,重启greenplum数据库 gpstop -r 03,恢复 gprecoverseg 04,状态检查 ...