zoukankan      html  css  js  c++  java
  • Vector与ArrayList区别

    1)Vector的方法都是同步的(Synchronized),是线程安全的;

      ArrayList的方法是线程不安全的。

      由于线程同步必然会影响性能,因此,ArrayList的性能比Vector好。

    请看下面一段代码:

    package com.thread.test;
    
    import java.util.ArrayList;
    import java.util.Vector;
    
    public class ArrayListOfThread {
        
        static ArrayList<Integer> al = new ArrayList<Integer>(10);
        
    //    static Vector<Integer> al = new Vector<Integer>();
        
        public static class AddThread extends Thread{
            @Override
            public void run() {
                for (int i = 0; i < 1000000; i++) {
                    al.add(i);
                }
            }
        }
        
        public static void main(String[] args) throws InterruptedException {
            Thread t1 = new Thread(new AddThread());
            Thread t2 = new Thread(new AddThread());
            t1.start();
            t2.start();
            t1.join();
            t2.join();
            System.out.println(al.size());
        }
    
    }

    由于ArrayList线程不安全,使用ArrayList时,程序就有可能会抛出异常

    Exception in thread "Thread-3" java.lang.ArrayIndexOutOfBoundsException: 163
        at java.util.ArrayList.add(ArrayList.java:459)
        at com.thread.test.ArrayListOfThread$AddThread.run(ArrayListOfThread.java:16)
        at java.lang.Thread.run(Thread.java:745)
    1000054

    但是如果改用线程安全的Vector,则只会输出如下结果:

    2000000

    2)当Vector或ArrayList中的元素超过它的初始化大小时,Vector会将它的容量翻倍,

      而ArrayList值增加50%的大小,这样,ArrayList就有利于节省内存空间。

  • 相关阅读:
    返回一个随机数组中的子数组中的数相加最大的和
    四则运算二之结果
    四则运算二
    UVA 11741 Ignore the Blocks
    UVA 1408 Flight Control
    UVA 10572 Black & White
    CF1138D(545,div2) Camp Schedule
    UVA 1214 Manhattan Wiring
    UVA 11270 Tiling Dominoes
    BZOJ 3261 最大异或和
  • 原文地址:https://www.cnblogs.com/java-spring/p/8317373.html
Copyright © 2011-2022 走看看