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就有利于节省内存空间。

  • 相关阅读:
    97.5%准确率的深度学习中文分词(字嵌入+Bi-LSTM+CRF)
    TensorFlow教程——Bi-LSTM+CRF进行序列标注(代码浅析)
    对Attention is all you need 的理解
    SpringBoot入门最详细教程
    TensorFlow saved_model 模块
    hadoop无法启动
    信号
    rpcserver不可用
    4444: [Scoi2015]国旗计划|贪心|倍增
    最小公倍数 SRM 661 Div1 250: MissingLCM
  • 原文地址:https://www.cnblogs.com/java-spring/p/8317373.html
Copyright © 2011-2022 走看看