做网站和程序员哪个好点,国内最近新闻,wordpress简单的验证码,湖南建设人力资源网站Vector 与 ArrayList 一样#xff0c;也是通过数组实现的#xff0c;不同的是它支持线程的同步#xff0c;即某一时刻只有一个线程能够写 Vector#xff0c;避免多线程同时写而引起的不一致性#xff0c;但实现同步需要很高的花费#xff0c;因此#xff0c;访问它比访问… 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)此方法将指定的组件添加到此向量的末尾将其大小增加1int capacity()此方法返回此向量的当前容量void clear()此方法从此向量中删除所有元素Object clone()此方法返回此向量的克隆boolean contains(Object elem)如果此向量包含指定的元素则此方法返回trueboolean containsAll(Collection? c)如果此Vector包含指定Collection中的所有元素则此方法返回truevoid copyInto(Object[] anArray)此方法将此向量的组件复制到指定的数组中E elementAt(int index)此方法返回指定索引处的组件EnumerationE 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()返回此向量中的组件数ListE 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关键字
Vector 是线程安全的ArrayList 不是线程安全的ArrayList 在底层数组不够用时在原来的基础上扩展0.5倍Vector 是扩展1倍
无一例外只要是关键性的操作Vector 的方法前面都加了 synchronized 关键字来保证线程的安全性。当执行 synchronized 修饰的方法前系统会对该方法加一把锁方法执行完成后释放锁加锁和释放锁的这个过程在系统中是有开销的因此在单线程的环境中Vector效率要差很多。多线程环境不允许用 ArrayList需要做处理。
和 ArrayListVector 一样同样的类似关系的类还有 HashMapHashTableStringBuilderStringBuffer后者都是前者线程安全版本的实现实现。
2、关于 Stack 栈
栈Stack 是一种 后进先出LIFOLast In First Out 的数据结构。
在 Java 中 Stack 类 extends Vector 栈容器扩充了五个方法 push()、peek()、pop()、empty()、search()栈中的方法遵循后进先出 main 方法需要等所有方法执行完弹出后才会弹出方法的递归每一层都要等下一层结束/弹出才能结束/弹出。
此外由于 Stack 是继承自 Vector 的而 Vector 是线程安全的所以 Stack 也是线程安全的。然而正因为 Stack 继承自 VectorStack 类已经不被官方推荐使用
官方推荐使用 LinkedList 来构建栈