Java的数组(Array)、Vector、ArrayList、HashMap的异同
2010-12-13 10:34
417 查看
1、数组:Java arrays的元素个数不能下标越界,从很大程度上保证了Java程序的安全性,而其他一些语言出现这一问题时常导致灾难性的后果。
Array可以存放Object和基本数据类型,但创建时必须指定数组的大小,并不能再改
1、数组:Java arrays的元素个数不能下标越界,从很大程度上保证了Java程序的安全性,而其他一些语言出现这一问题时常导致灾难性的后果。
Array可以存放Object和基本数据类型,但创建时必须指定数组的大小,并不能再改变。值得注意的是:当Array中的某一元素存放的是
Objrct reference
时,Java不会调用默认的构造函数,而是将其初值设为null,当然这跟Java对各类型数据赋默认值的规则是一样的,对基本数据类型同样适用。
2、Vector:对比于Array,当更多的元素被加入进来以至超出其容量时,Vector的size会动态增长,而Array容量是定死
的。同时,Vector在删除一些元素后,其所有下标大于被删除元素的元素都依次前移,并获得新下标比原来的小了)。注意:当调用Vector的
size()方法时,返回Vector中实际元素的个数。
Vector内部实际是以Array实现的,也通过元素的整数索引来访问元素,但它只能存放java.lang.Object对象,不能用于存放基本类型
数据,比如要存放一个整数10,得用new
Integer(10)构造出一个Integer包装类对象再放进去。当Vector中的元素个数发生变化时,
其内部的Array必须重新分配并进行拷贝,因此这是一点值得考虑的效率问题。
Vetor同时也实现了List接口,所以也可以算作Colletion了,只是它还特殊在:Vector is synchronized。即Vetor对象自身实现了同步机制。
3、ArrayList:实现了List接口,功能与Vetor一样,只是没有同步机制,当然元素的访问方式为从List中继承而来,可存放任何类型的对象。
4、HashMap:继承了Map接口,实现用Keys来存储和访问Values,Keys和Values都可以为空,它与Hashtable类的区别在于Hashtable类的Keys不能为null,并Hashtable类有同步机制控制,而HashMap类没有。
在Struts类库中实现了一个LableValueBean,用Lable(Key)来存储和访问Value,很方便。
一般情况下请尽量使用Array,当你要用到Vector的性能是而又不需要同步,请选用ArrayList,只有明确要用到同步的时候才选用
Vector。因为Vector和ArrayList底层就是用Array来实现的,且当容量变大或缩小时数组的拷贝工作是相当耗资源的!不过看系统对性
能和速度上的要求了,现在机子速度快了内存大了,就管他得了,呵呵。
Array可以存放Object和基本数据类型,但创建时必须指定数组的大小,并不能再
改变, //Array可以存放任意类型的数据
Vertor是放的Object。
Vertor一维,Hashmap/Hashtabe二维;
Vertor/Arraylist用index作检索,Hashmap/Hashtabe用key作为检索;
Hashmap,Arraylist不是同步的,意味着它们的速度更快;
Hashtable,Vertor是同步的,适用于与线程有关时;
Hashtale的key不能为null,Hashmap的key和values都可以为null;
性能方面:
通过索引访问和更新元素时,Vector和ArrayList的实现有着卓越的性能,因为不
存在除范围检查之外的其他开销。插入元素和删除元素总是要进行数组复制。
LinkedList的实质是个双向链表。ArrayList和Vector通常比LinkedList和同步封
装之后的LinkedList有着更好的性能。
Hashmap,Arraylist不是同步的,属于轻量级应用,性能上应该好些。
最后补充一点:使用get()和for循环来遍历Vector中的元素的速度明显快于:用Iterator或Ennumeration来遍历Vector。
Array可以存放Object和基本数据类型,但创建时必须指定数组的大小,并不能再改
1、数组:Java arrays的元素个数不能下标越界,从很大程度上保证了Java程序的安全性,而其他一些语言出现这一问题时常导致灾难性的后果。
Array可以存放Object和基本数据类型,但创建时必须指定数组的大小,并不能再改变。值得注意的是:当Array中的某一元素存放的是
Objrct reference
时,Java不会调用默认的构造函数,而是将其初值设为null,当然这跟Java对各类型数据赋默认值的规则是一样的,对基本数据类型同样适用。
2、Vector:对比于Array,当更多的元素被加入进来以至超出其容量时,Vector的size会动态增长,而Array容量是定死
的。同时,Vector在删除一些元素后,其所有下标大于被删除元素的元素都依次前移,并获得新下标比原来的小了)。注意:当调用Vector的
size()方法时,返回Vector中实际元素的个数。
Vector内部实际是以Array实现的,也通过元素的整数索引来访问元素,但它只能存放java.lang.Object对象,不能用于存放基本类型
数据,比如要存放一个整数10,得用new
Integer(10)构造出一个Integer包装类对象再放进去。当Vector中的元素个数发生变化时,
其内部的Array必须重新分配并进行拷贝,因此这是一点值得考虑的效率问题。
Vetor同时也实现了List接口,所以也可以算作Colletion了,只是它还特殊在:Vector is synchronized。即Vetor对象自身实现了同步机制。
3、ArrayList:实现了List接口,功能与Vetor一样,只是没有同步机制,当然元素的访问方式为从List中继承而来,可存放任何类型的对象。
4、HashMap:继承了Map接口,实现用Keys来存储和访问Values,Keys和Values都可以为空,它与Hashtable类的区别在于Hashtable类的Keys不能为null,并Hashtable类有同步机制控制,而HashMap类没有。
在Struts类库中实现了一个LableValueBean,用Lable(Key)来存储和访问Value,很方便。
一般情况下请尽量使用Array,当你要用到Vector的性能是而又不需要同步,请选用ArrayList,只有明确要用到同步的时候才选用
Vector。因为Vector和ArrayList底层就是用Array来实现的,且当容量变大或缩小时数组的拷贝工作是相当耗资源的!不过看系统对性
能和速度上的要求了,现在机子速度快了内存大了,就管他得了,呵呵。
Array可以存放Object和基本数据类型,但创建时必须指定数组的大小,并不能再
改变, //Array可以存放任意类型的数据
Vertor是放的Object。
Vertor一维,Hashmap/Hashtabe二维;
Vertor/Arraylist用index作检索,Hashmap/Hashtabe用key作为检索;
Hashmap,Arraylist不是同步的,意味着它们的速度更快;
Hashtable,Vertor是同步的,适用于与线程有关时;
Hashtale的key不能为null,Hashmap的key和values都可以为null;
性能方面:
通过索引访问和更新元素时,Vector和ArrayList的实现有着卓越的性能,因为不
存在除范围检查之外的其他开销。插入元素和删除元素总是要进行数组复制。
LinkedList的实质是个双向链表。ArrayList和Vector通常比LinkedList和同步封
装之后的LinkedList有着更好的性能。
Hashmap,Arraylist不是同步的,属于轻量级应用,性能上应该好些。
最后补充一点:使用get()和for循环来遍历Vector中的元素的速度明显快于:用Iterator或Ennumeration来遍历Vector。
相关文章推荐
- Java的数组Array、Vector、ArrayList、HashMap的异同
- Java的数组(Array)、Vector、ArrayList、HashMap的异同
- [转]Java的数组(Array)、Vector、ArrayList、HashMap的异同
- Java的数组(Array)、Vector、ArrayList、HashMap的异同
- Java容器类List、ArrayList、Vector及map、HashTable、HashMap分别的区别
- Java 容器类学习笔记1--了解Java提供的容器类List、ArrayList、Vector及map、HashTable、HashMap
- Java容器类List、ArrayList、Vector及map、HashTable、HashMap的区别与用法
- Java容器类List、ArrayList、Vector及map、HashTable、HashMap的区别与用法
- Java ArrayList、Vector、LinkedList 异同
- Java中List,ArrayList、Vector,map,HashTable,HashMap区别用法
- 详解Java中ArrayList、Vector、LinkedList三者的异同点
- Java - Vector、ArrayList和List的异同
- Java容器类List、ArrayList、Vector及map、HashTable、HashMap、TreeMap、LinkedHashap的区别与用法
- Java容器类List、ArrayList、Vector及map、HashTable、HashMap的区别与用法
- Java中Hashset、HashMap、ArrayList、LinkedList、Vector之间的联系与区别
- Java容器类List、ArrayList、Vector及map、HashTable、HashMap分别的区别
- Vector、ArrayList和hashtable hashmap的异同[zz]
- Java基础之ArrayList与LinkedList、Vector,以及HashMap与HashTable的区别
- java 容器类使用 Collection,Map,HashMap,hashTable,TreeMap,List,Vector,ArrayList的区别
- 熟练使用Arrays-数组-ArrayList-HashMap等常用Java类型的方法