Hashtable与Hashmap按理说是一样的,但是为什么使用后者的效率要明显高于前者?
有谁知道吗??
谢谢!
解决方案 »
- java问题求助
- i++会被线程影响吗?
- 一個關於substance的問題
- 急!有关存取数据的一个瓶颈问题....
- 请问这个类在api里怎么没有帮助文档呀,那他的文档在哪sun.audio.AudioStream
- 希望有高人前辈领个项目什么的,给我们这些菜鸟多点锻炼机会!
- 请教各位前辈 如何执行java例子的原代码 在线等 急求!!!!!!!!!!!!!!!
- 高手请指点!
- 为何我的程序在jbuilder9.0下,怎么编译出错了。
- qxluo(大头虾,不是大虾) 还是不行啊http://www.csdn.net/expert/Topicview2.asp?id=645663
- 请问下java操作excel用哪个包比较好
- 乱码
“
1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。2.HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。3.HashTable有一个contains(Object value),功能和containsValue(Object value)功能一样。4.HashTable使用Enumeration,HashMap使用Iterator。以上只是表面的不同,它们的实现也有很大的不同。5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。6.哈希值的使用不同,HashTable直接使用对象的hashCode,代码是这样的:
int hash = key.hashCode();
int index = (hash & 0x7FFFFFFF) % tab.length;
而HashMap重新计算hash值,而且用与代替求模:
int hash = hash(k);
int i = indexFor(hash, table.length);static int hash(Object x) {
int h = x.hashCode
}
”
A B
读a = 16
读a = 16 a= a -1
写回:15
a = a -1
写回15
B应该写回14才对,上面的例子相当于 16- 2 = 15 。这设计到对临界资源的访问问题
这就不安全了。不知道是不是这样!现在在学操作系统
我面试的时候就有这道题!还有arraylist呢!
int hash = hash(k);
int i = indexFor(hash, table.length);static int hash(Object x) {
int h = x.hashCode
}
和hashtable相比,这样做有什么好处???