-
Java 容器 Vector
2019-07-30 21:22:13文章目录3....Java 容器 3. Vector 3.1 同步 它的实现与 ArrayList 类似,但是使用了 synchronized 进行同步。 public synchronized boolean add(E e) { modCount++; ensureCapacityHelper(elem...Java 容器
3. Vector
3.1 同步
它的实现与 ArrayList 类似,但是使用了 synchronized 进行同步。
public synchronized boolean add(E e) { modCount++; ensureCapacityHelper(elementCount + 1); elementData[elementCount++] = e; return true; }
public synchronized E remove(int index) { modCount++; if (index >= elementCount) throw new ArrayIndexOutOfBoundsException(index); E oldValue = elementData(index); int numMoved = elementCount - index - 1; if (numMoved > 0) System.arraycopy(elementData, index+1, elementData, index, numMoved); elementData[--elementCount] = null; // Let gc do its work return oldValue; }
3.2 与 ArrayList 的比较
Vector 是同步的,因此开销就比 ArrayList 要大,访问速度更慢。最好使用 ArrayList 而不是 Vector,因为同步操作完全可以由程序员自己来控制;
Vector 每次扩容请求其大小的 2 倍空间,而 ArrayList 是 1.5 倍。3.3 替代方案
可以使用 Collections.synchronizedList() 得到一个线程安全的 ArrayList。
List<String> list = new ArrayList<>(); List<String> synList = Collections.synchronizedList(list);
也可以使用 concurrent 并发包下的 CopyOnWriteArrayList 类。
List<String> list = new CopyOnWriteArrayList<>();
-
Java容器Vector和ArrayList线程是否安全案例
2018-07-21 19:33:25一句话:Vector线程安全,ArrayList线程不安全,以下是实验代码: ...import java.util.Vector; public class ArrayListAndVectorThread { //实例化两个静态容器 static Vector<Integer>...一句话:Vector线程安全,ArrayList线程不安全,以下是实验代码:
package com.yarm.test; import java.util.ArrayList; import java.util.Vector; public class ArrayListAndVectorThread { //实例化两个静态容器 static Vector<Integer> vector = new Vector<Integer>(); static ArrayList<Integer> arrayList = new ArrayList<Integer>(); public static class ArrayListThread implements Runnable{ public void run(){ for (int i = 0; i < 10000000; i++) { //线程不安全 vector.add(i); //线程安全 arrayList.add(i); } } } // main函数 public static void main(String[] args) throws InterruptedException { Thread t1 = new Thread(new ArrayListThread()); Thread t2 = new Thread(new ArrayListThread()); t1.start(); t2.start(); t1.join(); t2.join(); System.out.println("arrayList长度:" + arrayList.size()); System.out.println("vector长度:" + vector.size()); } }
控制台输出结果:
arrayList长度:19991800
vector长度:20000000最后结论:
依照实验结果说明,ArrayList输出的长度不是20000000,而Vector的长度正好等于20000000,说明ArrayList线程不安全,Vector线程安全。
-
java的vector6_Java容器类研究6:Vector
2021-03-16 13:43:36java.util.VectorVector与ArrayList的异同相同点:随机存取,可通过位置序号直接获取数据。都是通过一个数组来存放元素。不同点:Vector是线程安全的,方法有synchronized关键字修饰。Vector容量增长策略Vector默认...java.util.Vector
Vector与ArrayList的异同
相同点:随机存取,可通过位置序号直接获取数据。都是通过一个数组来存放元素。
不同点:Vector是线程安全的,方法有synchronized关键字修饰。
Vector容量增长策略
Vector默认的增长策略是每次在原容量的基础上x2。
Vector的ListIterator怎么做到线程安全的
Vector实现了自己的iterator,为了保证并发线程安全的共享一个Vector,开发者在next等方法中也加入了synchronized。
public E next() {
synchronized (Vector.this) {
checkForComodification();
int i = cursor;
if (i >= elementCount)
throw new NoSuchElementException();
cursor = i + 1;
return elementData(lastRet = i);
}
}
这里synchronized修饰的是Vector.this对象本身,而不是iterator自己,这样多个线程使用iterator操作Vector时,就可以保证线程的安全。
Vector与ArrayList实现的Spliterator类似
唯一的区别就是在使用自己的Vector时,加上了synchronized关键字。
Stack与Vector
Stack类继承自Vector,stack的实现不止一种方式,比如LinkedList。java中在Vector基础上实现了一个Stack。实现的想法也很简单,就是在数组的末尾push和pop。
-
java 容器-Vector
2021-03-22 09:24:15Vector 的构造函数可以传入 capacityIncrement 参数,它的作用是在扩容时使容量 capacity 增长 capacityIncrement。如果这个参数的值小于等于 0,扩容时每次都令 capacity 为原来的两倍。 3. 与 ArrayList 的比较 ...1.同步
它的实现与 ArrayList 类似,但是使用了 synchronized 进行同步。
2.扩容
Vector 的构造函数可以传入 capacityIncrement 参数,它的作用是在扩容时使容量 capacity 增长 capacityIncrement。如果这个参数的值小于等于 0,扩容时每次都令 capacity 为原来的两倍。
3. 与 ArrayList 的比较
- Vector 是同步的,因此开销就比 ArrayList 要大,访问速度更慢。最好使用 ArrayList 而不是 Vector,因为同步操作完全可以由程序员自己来控制;
- Vector 每次扩容请求其大小的 2 倍(也可以通过构造函数设置增长的容量),而 ArrayList 是 1.5 倍。
4. 替代方案
可以使用
Collections.synchronizedList();
得到一个线程安全的 ArrayList。List<String> list = new ArrayList<>(); List<String> synList = Collections.synchronizedList(list);
也可以使用 concurrent 并发包下的 CopyOnWriteArrayList 类。
List<String> list = new CopyOnWriteArrayList<>();
-
Java知识点总结(Java容器-Vector)
2018-05-28 14:51:26Java知识点总结(Java容器-Vector) @(Java知识点总结)[Java, Java容器, JavaCollection, JavaList] Vector 与ArrayList相似,但是Vector是同步的。所以说Vector是线程安全的动态数组。它的操作与ArrayList几乎一样... -
java中vector容器_C++ vector 容器浅析
2021-03-16 22:13:54向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。二、容器特性1.顺序序列顺序... -
Java容器之Vector源码分析(Vector容器为啥线程安全呢?)
2020-04-25 16:06:32在上一篇博客 Java容器之ArrayList源码分析(这应该是Java中最简单的容器吧) 从源码的角度分析了ArrayList容器,现在我们看下Vector容器又是什么。 注明:以下源码分析都是基于jdk 1.8.0_221版本 Java容器之... -
Java容器之Vector
2018-10-13 15:54:57Vector的实现与 ArrayList 类似,但是使用了 synchronized 进行同步,所以是线程安全的,扩容大小为2倍,ArrayList为1.5倍。 -
java 容器之Vector
2018-05-30 16:59:23Vector一. 基本特点1. 动态数组,初始容量为10.(本质上就是数组)2. 线程同步(区别于动态数组ArrayList).Vector 增加或者删除元素接口均加了同步关键字。源码如下所示:public synchronized boolean add(E var1) { +... -
java中容器vector的使用和存取
2018-03-27 10:24:16在java中vector容器相当于c++的动态数组,Vector 可实现自动增长的对象数组。 java.util.vector提供了向量类(vector)以实现类似动态数组的功能。在Java语言中没有指针的概念,但如果正确灵活地使用指针又确实可以... -
vector排序java_Java用vector容器排序
2021-02-12 16:54:49/*** 功能:定义一个Student数组,其中保存学生的基本信息,包括姓名,学号,性别,还有三门课的成绩* 和课程对应的学分,计算出学分积,降序...import java.util.*;public class Demo4_10{public static void main... -
java vector的排序_Java用vector容器排序
2021-02-12 15:38:37/*** 功能:定义一个Student数组,其中保存学生的基本信息,包括姓名,学号,性别,还有三门课的成绩* 和课程对应的学分,计算出学分积,降序...import java.util.*;public class Demo4_10{public static void main... -
Java容器——Vector(Java8)源码解析
2018-10-29 20:35:03Vector是Java早期实现的容器,自JDK1.0就存在。目前在日常使用中逐渐被ArrayList或同步的ConcurrentLinkedQueue等代替,不过在早期的代码中和类库中,仍经常能见到Vector,因此有必要对其的组成和原理进行基本的了解... -
Java用vector容器排序
2014-06-04 17:58:57Java用vector容器排序 /** * 功能:定义一个Student数组,其中保存学生的基本信息,包括姓名,学号,性别,还有三门课的成绩 * 和课程对应的学分,计算出学分积,降序排序 * 时间:2014年6月4日16:33:24 * ... -
java vector的排序_Java 对Vector容器中的对象按照属性值排序
2021-03-09 02:43:32代码:import java.io.*;import java.util.Arrays;import java.util.Collections;import java.util....import java.util.Vector;class Box{public float score;}class BoxComparator implements Comparator {pu... -
关于java的vector容器和apache的vector
2015-05-13 16:00:53今天在研读mahout的cf算法时,看到了一小段代码,...从java Vector说起。 java.util.Vector类 继承了Object类,实现了Cloneable和Serializable 类,实现了可动态扩充的对象数组。类似数组,它包含的元素可通过 -
java容器源码实战——vector
2019-06-24 23:05:53最常用的容器 首先是vector类的继承关系如下图 Vector和ArrayList很相似,都是内部维护了一个可以变换长度的数组,但他们的扩容机制不同。 1.构造函数 public Vector() { this(10);//容量为 10 的数组。 }... -
java中容器Vectort用add添加对象是对象引用的问题
2016-07-04 15:44:56java中容器Vectort用add添加对象是对象引用的问题 众所周知的是在java中去掉了c++中的最为神奇的指针,但是java中存在着引用(个人认为java中的引用与c++的指针很相似,只是不能如指针那般使用)。引用,我们可以... -
java 策略容器_Java容器类研究6:Vector
2021-02-26 21:37:36java.util.VectorVector与ArrayList的异同相同点:随机存取,可通过位置序号直接获取数据。都是通过一个数组来存放元素。不同点:Vector是线程安全的,方法有synchronized关键字修饰。Vector容量增长策略Vector默认...