HashMap, HashSet, HashTable 详解

mac2024-11-19  5

我们已经足够属性hashtable了 这是一种基于字典数据结构的快速索引表。 Hashset是set的一个实现类,hashmap是map的一个实现类。同时Hashmap是hashtable的替代品。 hashset以对象作为元素,由于其继承set类 因此hashset中不能有重复的对象 而hashmap以key-value组成的一组对象作为元素,它的本质就是hashtable处理冲突的时候所用到的散列表(链表与数组的结合体) hashtable和hashmap的区别: 第一:

public class Hashtable extends Dictionary<> implements Map<> public class HashMap extends AbstractMap<> implements Map<>

第二: Hashtable 中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。在多线程并发的环境下,可以直接使用Hashtable,但是要使用HashMap的话就要自己增加同步处理了。 第三: hashtable长的key和value都不允许出现null值 hashmap中,null可以作为键 但是这样的键只能有一个。但是可以有一个键或者多个键对应的值为Null。因此当hashmap的get(key): value方法返回值为null的时候,对应两种情况:1 hashmap中没有这个键 2hashmap中有这个键 这个键对应的值为null. 因此不能用get来判断某键是否存在,而应该有containsKey(key):bool来判断。 第四:两者遍历方式在内部实现上的不同 第五:哈希值使用不同。hashtable直接使用对象的hashcode来计算index,但是hashmap重新计算哈希值 然后计算index. 第六:Hashtable和HashMap它们两个内部实现方式的数组的初始大小和扩容的方式。HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。

最新回复(0)