• 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());
    	}
    }

     运行结果:



     

  • 相关阅读:
    数组
    Spring创建对象的三种方式以及创建时间
    Struts文件上传下载
    自定义拦截器
    Struts过滤器
    mybatis整合ehcache
    mybatis主键返回
    shell脚本 列出所有网卡的ip地址
    Servlet执行过程
    centos时区
  • 原文地址:https://www.cnblogs.com/muyuge/p/6152023.html
Copyright © 2020-2023  润新知