ArrayList 和 Vector,HashTable 和 HashMap 的区别

首先这两组的区别基本上都在于 线程安全 问题上。

首先是ArrayListVector

( 1)同步性:

Vector线程安全的,也就是说是它的方法之间是线程同步的,而 ArrayList线程不安全的,它的方法之间是线程不同步的。如果只有一个线程会访问到集合,那最好是使用 ArrayList,因为它不考虑线程安全,效率会高些;如果有多个线程会访问到集合,那最好是使用 Vector,因为不需要我们自己再去考虑和编写线程安全的代码。

(2)数据增长:

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

总结:不设置的情况下, Vector 增长原来的一倍, ArrayList 增加原来的0.5倍。

再说 HashMapHashTable

1.HashMap 是 Hashtable 的轻量级实现(非线程安全的实现),他们都完成了 Map 接口,主要区别在于 HashMap 允许空( null)键值( key) ,由于非线程安全,在只有一个线程访问的情况下,效率要高于 Hashtable。
(所以HashMap是线程不安全的,HashTable是线程安全的)

2.HashMap 允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许。

3.HashMap 把 Hashtable 的 contains 方法去掉了,改成 containsvalue 和 containsKey。因为contains 方法容易让人引起误解。

4.Hashtable 继承自 Dictionary 类,而 HashMap 是 Java1.2引进的 Map interface 的一个实现。最大的不同是, Hashtable 的方法是 Synchronize 的,而 HashMap 不是,在多个线程访问Hashtable 时,不需要自己为它的方法实现同步,而 HashMap 就必须为之提供外同步。Hashtable 和 HashMap 采用的 hash/rehash 算法都大概一样,所以性能不会有很大的差异。

总结:单线程实现的时候使用 ArrayList 和 HashMap,但这两个是线程不安全的,在多线程实现的时候需要自己为他的方法进行同步。而HashTable 和 Vector 是线程安全的,但是 HashMap 与 HashTable 相比有一些新的方法比较有用。

List 和 Map两种集合类型的区别:

一个是存储单列数据的集合,另一个是存储键和值这样的双列数据的集合, List 中存储的数据是有顺序,并且允许重复Map 中存储的数据是没有顺序的,其键是不能重复的,它的值是可以有重复的,List是继承 Collection接口的,但是Map不是

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值