精华内容
下载资源
问答
  • 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<>();
    
    展开全文
  • 一句话:Vector线程安全,ArrayList线程不安全,以下是实验代码: ...import java.util.Vector; public class ArrayListAndVectorThread { //实例化两个静态容器 static Vector&lt;Integer&gt...

    一句话: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.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:15
    Vector 的构造函数可以传入 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) @(Java知识点总结)[Java, Java容器, JavaCollection, JavaList] Vector 与ArrayList相似,但是Vector是同步的。所以说Vector是线程安全的动态数组。它的操作与ArrayList几乎一样...
  • 向量(Vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。二、容器特性1.顺序序列顺序...
  •   在上一篇博客 Java容器之ArrayList源码分析(这应该是Java中最简单的容器吧) 从源码的角度分析了ArrayList容器,现在我们看下Vector容器又是什么。 注明:以下源码分析都是基于jdk 1.8.0_221版本 Java容器之...
  • Java容器Vector

    2018-10-13 15:54:57
    Vector的实现与 ArrayList 类似,但是使用了 synchronized 进行同步,所以是线程安全的,扩容大小为2倍,ArrayList为1.5倍。
  • java 容器Vector

    2018-05-30 16:59:23
    Vector一. 基本特点1. 动态数组,初始容量为10.(本质上就是数组)2. 线程同步(区别于动态数组ArrayList).Vector 增加或者删除元素接口均加了同步关键字。源码如下所示:public synchronized boolean add(E var1) { +...
  • java容器vector的使用和存取

    千次阅读 2018-03-27 10:24:16
    javavector容器相当于c++的动态数组,Vector 可实现自动增长的对象数组。 java.util.vector提供了向量类(vector)以实现类似动态数组的功能。在Java语言中没有指针的概念,但如果正确灵活地使用指针又确实可以...
  • /*** 功能:定义一个Student数组,其中保存学生的基本信息,包括姓名,学号,性别,还有三门课的成绩* 和课程对应的学分,计算出学分积,降序...import java.util.*;public class Demo4_10{public static void main...
  • /*** 功能:定义一个Student数组,其中保存学生的基本信息,包括姓名,学号,性别,还有三门课的成绩* 和课程对应的学分,计算出学分积,降序...import java.util.*;public class Demo4_10{public static void main...
  • VectorJava早期实现的容器,自JDK1.0就存在。目前在日常使用中逐渐被ArrayList或同步的ConcurrentLinkedQueue等代替,不过在早期的代码中和类库中,仍经常能见到Vector,因此有必要对其的组成和原理进行基本的了解...
  • Javavector容器排序

    千次阅读 2014-06-04 17:58:57
    Javavector容器排序 /** * 功能:定义一个Student数组,其中保存学生的基本信息,包括姓名,学号,性别,还有三门课的成绩 * 和课程对应的学分,计算出学分积,降序排序 * 时间:2014年6月4日16:33:24 * ...
  • 代码: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...
  • 今天在研读mahout的cf算法时,看到了一小段代码,...从java Vector说起。    java.util.Vector类  继承了Object类,实现了Cloneable和Serializable 类,实现了可动态扩充的对象数组。类似数组,它包含的元素可通过
  • 最常用的容器 首先是vector类的继承关系如下图 Vector和ArrayList很相似,都是内部维护了一个可以变换长度的数组,但他们的扩容机制不同。 1.构造函数 public Vector() { this(10);//容量为 10 的数组。 }...
  • java容器Vectort用add添加对象是对象引用的问题  众所周知的是在java中去掉了c++中的最为神奇的指针,但是java中存在着引用(个人认为java中的引用与c++的指针很相似,只是不能如指针那般使用)。引用,我们可以...
  • java.util.VectorVector与ArrayList的异同相同点:随机存取,可通过位置序号直接获取数据。都是通过一个数组来存放元素。不同点:Vector是线程安全的,方法有synchronized关键字修饰。Vector容量增长策略Vector默认...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,523
精华内容 1,009
关键字:

java容器vector

java 订阅