当前位置: 移动技术网 > IT编程>开发语言>Java > 对比Hashtable,HashMap,TreeMap,谈谈对HashMap的理解

对比Hashtable,HashMap,TreeMap,谈谈对HashMap的理解

2019年07月06日  | 移动技术网IT编程  | 我要评论
都实现了Map接口,存储的内容是基于key-value的键值对映射,一个映射不能有重复的键,一个键最多只能映射一个值。 1.初始化的时候:HashTable在不指定容量的情况下的默认容量是11,且不要求底层数组的容量一定要为2的整数次幂;HashMap默认的容量为16,且要求容量一定为2的整数次幂。 ...

都实现了map接口,存储的内容是基于key-value的键值对映射,一个映射不能有重复的键,一个键最多只能映射一个值。

1.初始化的时候:hashtable在不指定容量的情况下的默认容量是11,且不要求底层数组的容量一定要为2的整数次幂;hashmap默认的容量为16,且要求容量一定为2的整数次幂。

2.hashtable,hashmap具有无序特性。treemap是利用红黑树实现的,实现了sortmap接口,能够根据保存的键的记录进行排序。所以需要使用排序则选择treemap,默认为升序排序,可通过实现comparator自定义排序方式

3.hashtable的key,value都不能为null;hashmap中的key,value可以为null,但是只有一个key为null的键值对,但是允许有多个值为null的键值对;treemap中当没有实现comparator接口时,key不可以为null;当实现comparator接口时,若未对null情况进行判断,则key不可以为null.

4.hashtable其方法函数都是同步的,因此保证了线程的安全性。因为同步的关系,在多线程环境下,当一个线程访问hashtable的同步方法时,其他线程访问同步方法就会进入阻塞状态,大大的降低了程序的运行的效率,因此被废弃,不推荐使用。

hashmap不支持线程的同步,即任一时刻可以有多个线程同时写hashmap,会导致数据的不一致。如果需要同步可以使用collections的synchronizedmap方法.或者concurrenthashmap类,其基于lock实现锁分段技术,它不但确保多线程环境下数据访问安全性,而且性能上有长足的提升。

hashmap的总结:

hashmap基于哈希思想,实现对数据的读写。当键值对被传递给put()方法时,它调用键对象的hashcode()方法来计算hashcode,然后找到bucket位置来存储对象。当获取对象的时候,通过键对象的equals()方法找到正确的键值对,然后返回值对象。hashmap通过链表来解决碰撞问题,当碰撞发生时,对象将会储存在链表的下个节点中.hashmap在每个链表节点中储存键值对对象。当两个不同的键对象的hashcode相同时,它们会储存在同一个bucket位置的链表中,这时候就需要通过equals()方法来找到键值对。

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网