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

    ArrayList与Vector的区别

          相同


          这两个类都实现了List接口。


          他们都是有序集合。

          不同


          ArrayList实现不是同步的,Vector实现是同步的。


          ArrayList与Vector都有一个初始的容量大小,当存储进它们里面的元素的个数超过了容量时,就需要增加ArrayList与Vector的存储空间,每次要增加存储空间时,不是只增加一个存储单元,而是增加多个存储单元,每次增加的存储单元的个数在内存空间利用与程序效率之间要取得一定的平衡。Vector默认增长为原来两倍,而ArrayList的增长策略在文档中没有明确规定(从源代码看到的是增长为原来的1.5倍)。

          下面两段代码主要演示了线程同步的区别:

          ArrayList:

    import java.util.ArrayList;
    /**
     * 
     * @author InJavaWeTrust
     *
     */
    public class ArrayListMultiThread implements Runnable {
    	public static ArrayList<Integer> li = new ArrayList<Integer>();
    	public void run() {
    		for (int i = 0; i < 100000; i++) {
    			li.add(i);
    		}
    	}
    	public static void main(String[] args) throws InterruptedException {
    		Thread t1 = new Thread(new ArrayListMultiThread());
    		Thread t2 = new Thread(new ArrayListMultiThread());
    		t1.start();
    		t2.start();
    		t1.join();
    		t2.join();
    		System.out.println(li.size());
    	}
    }

           运行结果:



     

            这是因为ArrayList在扩展过程中,内部一致性遭到破坏,由于不是同步的,另外一个线程访问到了不一致的内部状态,导致出现越界问题。

          Vector:

    import java.util.Vector;
    /**
     * 
     * @author InJavaWeTrust
     *
     */
    public class VectorMultiThread implements Runnable {
    	public static Vector<Integer> v = new Vector<Integer>();
    	public void run(){
    		for (int i = 0; i < 100000; i++) {
    			v.add(i);
    		}
    	}
    	public static void main(String[] args) throws InterruptedException {
    		Thread t1 = new Thread(new VectorMultiThread());
    		Thread t2 = new Thread(new VectorMultiThread());
    		t1.start();
    		t2.start();
    		t1.join();
    		t2.join();
    		System.out.println(v.size());
    	}
    }

     运行结果:



     

  • 相关阅读:
    linux_crontab_定时删除
    bigdata_zookeeper 可视化界面zkui
    bigdata_ Kafka集群模式部署
    大数据_zookeeper环境搭建中的几个坑
    实战-130W表增加字段耗时
    每天一个linux命令
    nginx重启报找不到nginx.pid的解决方法
    log4j配置
    mysql select 1
    查看mysql语句运行时间
  • 原文地址:https://www.cnblogs.com/new0801/p/6146627.html
Copyright © 2011-2022 走看看