hashTable与HashMap异同之处

Java为数据结构中的映射定义了一个接口java.util.Map, HashMap和HashTable是其实现类;Map是用来存储键值对的数据结构,在数组中是通过数组下标来对数组中的元素进行索引的,而在Map中,是通过对象来进行索引的,用来索引的对象叫做key, 其对应的对象叫做value。
hashMap是最常用的一个Map,它是通过key的hashCode值存储数据的,根据key可以直接获取对应的value,具有很快的访问速度。由于hashMap和hashTable都采用了hash方法进行索引,但它们之间还有一些不同之处:
(1) hashMap是hashTable的轻量级实现,也就是说hashMap是非线程安全的,它们都实现了Map接口,但hashMap允许null值的key出现,至多出现一次,但hashTable不允许null值的key
(2) hashMap将hashTable中的container()方法去掉了,因为container()方法容易引起误解,改为containsKey()和containsValue()方法,hashMap是java 1.2引进的一个Map接口的实现类。
(3) hashTable方法是线程安全的,而hashMap是不支持线程同步的,即,是线程不安全的,当多个线程访问hashTable时,开发人员不需要对它进行同步,而hashMap需要开发人员提供额外的同步机制,就效率而言,hashMap高于hashTable
(4) hashMap使用迭代器Iterator遍历对象,而hashTable使用枚举Enumeration遍历对象
(5) hashMap和hashTable采用的hash/rehash几乎一样,所以性能上不会有太大差别
(6) 在hashtable中,hash数组的默认大小值是11,增加的方式是old*2+1,hashMap中,数组的默认大小值是16,而且一定是2的倍数
(7) hash值的使用不同,hashTable直接使用对象的hashcode
(8) hashMap的线程同步,可通过如下方法实现:
Map m = Collections.synchronizedMap(new HashMap());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值