Java集合:关于 Vector 的内容盘点

Vector 与 ArrayList 一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写 Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问 ArrayList 慢。
~
本篇内容包括:Vector 概述、Vector 的使用(构造方法&常用方法)、ArrayList 与 Vector 的区别以及 Stack 栈的相关知识点!


文章目录

    • 一、Vector 概述
    • 二、Vector 的使用
        • 1、构造函数
        • 2、常用方法
    • 三、其他知识点
        • 1、ArrayList 与 Vector 的区别
        • 2、关于 Stack 栈


一、Vector 概述

Vector 与 ArrayList 一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写 Vector,避免多线程同时写而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问 ArrayList慢。

Vector 的思路和 ArrayList 基本是相同的,底层是数组保存元素,Vector 默认的容量是10,有一个增量系数,如果指定,那么每次都会增加一个系数的大小,否则就扩大一倍。

Vector 扩容的时候,其实就是数组的复制,其实还是比较耗时间的,所以,我们使用的时候应该尽量避免比较消耗时间的扩容操作。

Vector 和 ArrayList 最大的不同,是它是线程安全的,几乎每一个方法都加上了 Synchronize 关键字,所以它的效率相对也比较低一点。ArrayList 如果需要线程安全,可以使用 Collections.synchronizedList(new ArrayList(...)); 方法,获取一个线程安全的 List。


二、Vector 的使用

1、构造函数

方法名方法说明
public Vector()此构造函数用于创建空向量,以使其内部数据数组的大小为10,其标准容量增量为零
public Vector(int initialCapacity)此构造函数用于创建具有指定初始容量且容量增量等于零的空向量
public Vector(int initialCapacity, int capacityIncrement)此构造函数用于创建具有指定初始容量和容量增量的空向量
public Vector(Collection<? extends E> c)此构造函数用于按照集合的迭代器返回的顺序创建包含指定集合元素的向量

2、常用方法

方法名方法说明
boolean add(E o)此方法将指定的元素追加到此Vector的末尾
void add(int index, E element)此方法将指定的元素插入此Vector中的指定位置
boolean addAll(Collection<? extends E> c)此方法将指定Collection中的所有元素追加到此Vector的末尾
boolean addAll(int index, Collection<? extends E> c)此方法将指定Collection中的所有元素插入到此Vector中的指定位置
void addElement(E obj)此方法将指定的组件添加到此向量的末尾,将其大小增加1
int capacity()此方法返回此向量的当前容量
void clear()此方法从此向量中删除所有元素
Object clone()此方法返回此向量的克隆
boolean contains(Object elem)如果此向量包含指定的元素,则此方法返回true
boolean containsAll(Collection<?> c)如果此Vector包含指定Collection中的所有元素,则此方法返回true
void copyInto(Object[] anArray)此方法将此向量的组件复制到指定的数组中
E elementAt(int index)此方法返回指定索引处的组件
Enumeration<E> elements()此方法返回此向量的组件的枚举。
void ensureCapacity(int minCapacity)此方法可增加此向量的容量,以确保它至少可以保存最小容量参数指定的组件数
boolean equals(Object o)此方法将指定的Object与此Vector进行比较以获得相等性
E firstElement()返回此向量的第一个组件(位于索引 0 处的项)
E get(int index)返回向量中指定位置的元素
int indexOf(Object elem)搜索给定参数的第一个匹配项,使用 equals 方法测试相等性
int indexOf(Object elem, int index)搜索给定参数的第一个匹配项,从 index 处开始搜索,并使用 equals 方法测试其相等性
void insertElementAt(E obj, int index)将指定对象作为此向量中的组件插入到指定的 index 处
boolean isEmpty()测试此向量是否不包含组件
E lastElement()返回此向量的最后一个组件
int lastIndexOf(Object elem)返回指定的对象在此向量中最后一个匹配项的索引
int lastIndexOf(Object elem, int index)向后搜索指定的对象,从指定的索引处开始搜索,并返回一个索引
E remove(int index)移除此向量中指定位置的元素
boolean remove(Object o)移除此向量中指定元素的第一个匹配项,如果向量不包含该元素,则元素保持不变
boolean removeAll(Collection<?> c)从此向量中移除包含在指定 Collection 中的所有元素
void removeAllElements()从此向量中移除全部组件,并将其大小设置为零
boolean removeElement(Object obj)从此向量中移除变量的第一个(索引最小的)匹配项
void removeElementAt(int index)删除指定索引处的组件
protected void removeRange(int fromIndex, int toIndex)从此 List 中移除其索引位于 fromIndex(包括)与 toIndex(不包括)之间的所有元素
boolean retainAll(Collection<?> c)在此向量中仅保留包含在指定 Collection 中的元素
E set(int index, E element)用指定的元素替换此向量中指定位置处的元素
void setElementAt(E obj, int index)将此向量指定 index 处的组件设置为指定的对象
void setSize(int newSize)设置此向量的大小
int size()返回此向量中的组件数
List<E> subList(int fromIndex, int toIndex)返回此 List 的部分视图,元素范围为从 fromIndex(包括)到 toIndex(不包括)
Object[] toArray()返回一个数组,包含此向量中以正确顺序存放的所有元素
<T> T[] toArray(T[] a)返回一个数组,包含此向量中以正确顺序存放的所有元素;返回数组的运行时类型为指定数组的类型
String toString()返回此向量的字符串表示形式,其中包含每个元素的 String 表示形式
void trimToSize()对此向量的容量进行微调,使其等于向量的当前大小

三、其他知识点

1、ArrayList 与 Vector 的区别

Vector 和 ArrayList 一样,都继承自 List,在大多方法的实现上,Vector 较 ArrayList,就是多了一个 synchronized关键字

  1. Vector 是线程安全的,ArrayList 不是线程安全的
  2. ArrayList 在底层数组不够用时在原来的基础上扩展0.5倍,Vector 是扩展1倍

无一例外,只要是关键性的操作,Vector 的方法前面都加了 synchronized 关键字,来保证线程的安全性。当执行 synchronized 修饰的方法前,系统会对该方法加一把锁,方法执行完成后释放锁,加锁和释放锁的这个过程,在系统中是有开销的,因此,在单线程的环境中,Vector效率要差很多。(多线程环境不允许用 ArrayList,需要做处理)。

和 ArrayList&Vector 一样,同样的类似关系的类还有 HashMap&HashTable,StringBuilder&StringBuffer,后者都是前者线程安全版本的实现实现。

2、关于 Stack 栈

栈(Stack) 是一种 后进先出(LIFO:Last In First Out) 的数据结构。

在 Java 中 Stack 类 extends Vector 栈容器,扩充了五个方法: push()peek()pop()empty()search(),栈中的方法遵循后进先出 main 方法需要等所有方法执行完弹出后才会弹出,方法的递归每一层都要等下一层结束/弹出才能结束/弹出。

此外,由于 Stack 是继承自 Vector 的,而 Vector 是线程安全的,所以 Stack 也是线程安全的。然而正因为 Stack 继承自 Vector,Stack 类已经不被官方推荐使用!!

官方推荐使用 LinkedList 来构建栈!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535531.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

memcached 的基本命令

memcached 的基本命令(安装、卸载、启动、配置相关)&#xff1a; -p 监听的端口 -l 连接的 IP 地址, 默认是本机 -d start 启动 memcached 服务 -d restart 重起 memcached 服务 -d stop|shutdown 关闭正在运行的 memcached 服务 -d install 安装 memcached 服务 -d uninstall …

Java集合:关于 HashSet 的内容盘点

哈希表存放的是哈希值&#xff0c; HashSet 存储元素的顺序并不是按照存入时的顺序&#xff08;和 List 显然不同&#xff09; 而是按照哈希值来存的所以取数据也是按照哈希值取得。 &#xff5e; 本篇内容包括&#xff1a;HashSet 概述、HashSet 与 HashMap 的关系以及HashSet…

mysql备份脚本

#!/bin/bash #保留备份个数&#xff0c;会删除时间较早的.dump备份 number3 #设置备份保存路径&#xff0c;yourpath替换成自己的备份保存路径 backup_diryourpath #日期格式 dddate %Y%m%d #备份工具 toolmysqldump #数据库用户名 usernameroot #数据库密码&#xff0c;由于密…

Java集合:关于 TreeSet 的内容盘点

TreeSet() 是使用二叉树的原理对新 add() 的对象按照指定的顺序排序&#xff08;升序、降序&#xff09;&#xff0c;每增加一个对象都会进行排序&#xff0c;将对象插入的二叉树指定的位置&#xff1b; ~ 本篇内容包括&#xff1a;TreeSet 概述、TreeSet 的使用以及其他知识点…

python求素数

口求100内的素数 -个数能被从2开始到自己的平发根的正整数整数整除,就是合数 import math n100 for X in range(2, n): for i in range(2, math.ceil(math.sqrt(x))): if x %i 0: break else: print(x)口求100内的素数 合数一定可以分解为几个质数的乘积 import math n100 pri…

svn钩子脚本

REP0S"$1" REV"$2"export LANGen_US.UTF-8 LOGPATH"/app/log" [ !-d ${LOGPATH}] && mkdir $[LOGPATH) -p #update content from svn↓14 SVN/usr/bin/svn↓ SVN update --username test --password test /data/ if[ $? -eq ] then /us…

shell判断字符串是否为数字

#1.组合语法判断1: [ -n "echo $num|sed s/[0-9]//g" -a -n "echo $2|sed s/[0-9]//g"] &&\echo”两个参数都必须为数字”&& exit 1#2.组合语法判断2:[ -n "echo $num|sed s/[0-9]//g" -a -n "echo $2|sed s/[0-9]//g&…

MySQL:DQL 数据查询语句盘点

本篇内容包括&#xff1a;DQL 的简介、SELECT 语句、WHERE 条件语句、JOIN 连接查询(多表查询)和分组、过滤、排序、分页、子查询的使用。 一、DQL 简介 DQL&#xff08;Data QueryLanguage&#xff09;语句&#xff0c;即数据查询语句 常用的语句关键字有&#xff1a;SELECT…

MySQL:DML 数据操作语句盘点

本篇内容包括&#xff1a;DML 的简介、INSERT 命令、UPDATE 命令、DELETE 命令以及 TRUNCATE 命令的使用。 一、DML 简介 DML&#xff08;Data Manipulation Language&#xff09;语句&#xff0c;即数据操作语句&#xff0c;用于操作数据库对象中所包含的数据。 常用关键字包…

MySQL:DDL 数据定义语句盘点

本篇内容包括&#xff1a;DDL 的简介、SHOW 查看语句、CREATE 创建语句、ALTER 修改语句以及 DROP 删除语句的使用。 一、DDL 简介 DDL&#xff08;Data Definition Language&#xff09;&#xff0c;即数据定义语句&#xff0c;功能就是定义数据库DATabase、表table、索引ind…

MySQL:DCL 数据控制语句盘点

本篇内容包括:DCL 简介、GRANT、REVOKE、COMMIT、ROLLBACK、SAVEPOINT、LOCK命令的使用。 一、DCL 简介 DCL&#xff08;Data Control Language&#xff09;语句&#xff0c;即数据控制语句&#xff0c;用于设置或更改数据库用户或角色权限的语句 常用关键字包括&#xff1a;…

oracle迁移父子数据

现有需求如下&#xff0c;业务组织单元表中id字段数据在另外一个系统全部重复&#xff0c;但需要将此业务单元组织导入另一系统 业务组织单元表Isc_Specialorg_Unit 表中存在ID字段为子节点数据&#xff0c;parent_id为父节点数据&#xff0c;orgpath为组织路径 现在做如下操…

批量更新数据库数据

"update isc22.isc_user t set t.saphrid "&E1&"where t.id "&B1&";"

oracle控制文件

控制文件是数据库里面非常重要的一类文件,它记录了当前实例连接的数据库的结构和行为&#xff0c;并维护数据库的一致性。 初始化参数文件中描述其位置&#xff0c;很小的:二进制文件,一般不要超过100mmount读open一直在用 控制文件只能连接一个database丢失要恢复 …

oracle表空间

概念 表空间和数据文件 ●表空间是逻辑存储概念&#xff0c;一个表空间是一个或多个数据文件的逻辑集合 ●存储对象(表、索引)逻辑的存储在表空间上&#xff0c;而存储对象的数据物理的存放在数据文件上 ●数据库至少需要一个叫做system的表空间&#xff0c;也就是系统表空间 ●…

oracle日志

日志分类 redo log files联机日志或重做日志 archived log files归档日志 1184198alert log files 告警日志 trace files user_ _dump_ _dest 用户信息日志如跟踪会话日志 background dump_ dest进程日志还有其他一-些不常用的日志 v$database的log_mode 数据库归档模式…

MySQL:分库分表知识点盘点

本篇内容包括&#xff1a;数据库瓶颈、分库分表以及分库分表相关问题 一、数据库瓶颈 不管是IO瓶颈&#xff0c;还是CPU瓶颈&#xff0c;最终都会导致数据库的活跃连接数增加&#xff0c;进而逼近甚至达到数据库可承载活跃连接数的阈值。在业务Service来看就是&#xff0c;可用…

oracle的sga

sga SGA的管理 ■有三种方式&#xff1a; ●8i:SGA的总大小由所有内存组件大小之和决定&#xff0c;不能直接定义SCA大小。对内部组件大小的修改必须在数据库重起 后 才能生为&#xff0c;所以叫做SGA的静态管理。 ●9i&#xff…

MySQL:日志知识点盘点

本篇内容包括&#xff1a;binlog&#xff08;二进制日志&#xff09;、redo log 以及 undo log 一、binlog&#xff08;二进制日志&#xff09; binlog 用于记录数据库执行的写入性操作(不包括查询)信息&#xff0c;以二进制的形式保存在磁盘中。binlog是mysql的逻辑日志&…

ROWNUM的使用

一个伪列看起来像是一个表中的列&#xff0c;但实际上并不保存在表中。你可以查询&#xff0c; 但是不能插入&#xff0c;修改和删除其中的值。一个伪列也类似于一个没有参数的函 数。但是在典型情况下&#xff0c;在结果集中可以为每一行返回相同的值&#xff0c;而伪列通 常为…