ArrayList与Vector的区别

本文对比了ArrayList与Vector两个Java集合类的异同。相同点在于它们都实现了List接口且为有序集合;不同之处则体现在ArrayList是非同步实现,而Vector是同步实现。此外,它们在扩容策略上也有所不同,Vector默认容量翻倍,而ArrayList增长至1.5倍。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 运行结果:



 

 

 

 

转载于:https://www.cnblogs.com/muyuge/p/6152023.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值