ArrayList与Vector的区别
2016-05-01 22:22
288 查看
ArrayList与Vector的区别
相同
这两个类都实现了List接口。
他们都是有序集合。
不同
ArrayList实现不是同步的,Vector实现是同步的。
ArrayList与Vector都有一个初始的容量大小,当存储进它们里面的元素的个数超过了容量时,就需要增加ArrayList与Vector的存储空间,每次要增加存储空间时,不是只增加一个存储单元,而是增加多个存储单元,每次增加的存储单元的个数在内存空间利用与程序效率之间要取得一定的平衡。Vector默认增长为原来两倍,而ArrayList的增长策略在文档中没有明确规定(从源代码看到的是增长为原来的1.5倍)。
下面两段代码主要演示了线程同步的区别:
ArrayList:
运行结果:
这是因为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()); } }
运行结果:
相关文章推荐
- 写单机看看 简单的splite3
- MapReduce Inverted index
- 关于将QT tableview中的数据导出到EXcel表格中
- ArrayList与Vector的区别
- nova-compute 部署 instance 详解 - 每天5分钟玩转 OpenStack(28)
- 常用类
- C语言字节对齐(以32位系统为例)
- wamp下codeigniter报500错误的问题
- 调用start()方法和直接调用run()方法的区别
- java判断字符串是否回文
- CPPunit 1.13.2 + vs2013 配置与使用
- java判断字符串是否回文
- 调用start()方法和直接调用run()方法的区别
- HDU-2859 Phalanx ( DP )
- 冲刺——第六天
- 20145303刘俊谦 《Java程序设计》实验四 实验报告
- catalian.sh中JAVA_OPTS配置
- hdoj5676ztr loves lucky numbers
- java序列化与反序列化
- ubuntu 14.04 mysql change datadir