首页天道酬勤hashtable底层实现原理,hashtable数据结构

hashtable底层实现原理,hashtable数据结构

张世龙 05-05 19:50 118次浏览

Hashtable的应用非常广泛,HashMap是新框架中代替Hashtable的类。 也就是说,建议使用HashMap,不要使用Hashtable。 你可能觉得Hashtable很好用,为什么不用呢? 我在这里简要分析他们的差异。

1 .因为1.Hashtable方法是同步的,而HashMap是不同步的,所以在多线程情况下手动同步HashMap的区别就像Vector和ArrayList一样。

查看Hashtable的源代码时,除了构造函数之外,Hashtable的所有公共方法声明都有synchronized关键字,但HashMap的源代码中也没有synchronized的阴影当然,评论除外。

2.Hashtable不允许空值。 (key和value都不可以),HashMap允许空值。 ) key和value都可以)。

首先,我们来看看Hashtable的常规输出示例。

Hashtable table=new Hashtable (; table.put(a-key )、(a-value ); table.put(B-key )、(b-value ); table.put(c-key )、(c-value ); 输出如下。

请看壮观的刺猬Hashtable拒绝null的例子:

table.put(null,' a-value ' ); 执行后的异常如下

exceptioninthread ' main ' Java.lang.nullpointerexceptionatjava.util.hashtable.put (hashtable.Java 3360399 ) atcoon

HashMap map=new HashMap (; map.put (空,' a-value ' ); map.put(B-key )、null ); map.put(c-key )、null );

运行后,输出如下所示。

B- key-null null-a-valuec-key-null

PS:可以从上面的示例中发现Hashtable与HashMap的相同之处。 也就是说,是无序保管。

3 .两者扫描方式大同小异,Hashtable比HashMap多一种elements方法。

Enumeration em=table.elements (; while(em.hasmoreelements () (stringobj=) string ) em.nextElement ); system.out.println(obj; }

Hashtable和HashMap都通过values ()方法返回Collection进行遍历。

Collection coll=map.values (; Iterator it=coll.iterator (; while(it.Hasnext () (stringobj=) string ) it.next ); system.out.println(obj; }

两者都可以通过entrySet ()方法返回Set进行遍历处理。

Set set=table.entrySet (; Iterator it=set.iterator (; while(it.Hasnext () (输入项=)输入项) it.next ); system.out.println (entry.getkey () '- ' entry.getValue ) ); }

4.HashTable使用枚举,HashMap使用迭代器

以下两点是从内部实现机制进行比较的。

明白了:

5 .哈希值的使用不同。 Hashtable直接使用对象的hashCode。 代码如下所示。

int hash=key.hashCode (; intindex=(hash0x7fffffff ) % tab.length;

混列映射重新计算混列值,并使用和而不是求出类型。

inthash=hash(k; intI=indexfor(hash,table.length ); staticinthash(objectx ) {int h=x.hashCode; h=~~(h9; h^=(h14; h=(h4 ); h^=(h10; 返回h; }staticintindexfor(inth,int length ) returnh (length-1 );

6 .在6.Hashtable中,hash数组的默认大小为11,以old*2 1递增。 混列散列数组的默认大小为16,并且必须是2的指数。

Redis和hashmap哪个快,hashtable是谁的子类