读书人

hashtabe,hash地图,等为什么要用hash算

发布时间: 2013-12-30 14:16:08 作者: rapoo

hashtabe,hashmap,等为什么要用hash算法
如果是为了2分查找算法,生成一个整数, 好做排序的话, 那么每个字符实际上都对应一个assiic码值

比如
ac = 6163
bb = 6262
因此就算不用hash散列算法 也不会重复呀. 更何况,hash算法也不能保证不发生碰撞. 这个情况下, 为什么还要使用hash呢??? 求明白的给个原因
[解决办法]

引用:
Quote: 引用:

Quote: 引用:

我都说了 我知道2分查找算法啊... 你还说什么 只需一次比较...何况这也不是所谓一次比较就能得出.

求明白人给个回复


说实话实在不想回这个贴,不管别人说的对不对你这个态度就有问题
根据实际情况找到合适的散列函数分配足够的空间,一次比较找到是有可能实现的
看数据结构散列这一章


好吧, 我态度有问题, 表示歉意.
我明白 hashmap.get(hashcode) 就是直接从数组里端出来,没有循环(不冲突的情况)
我在C#区也发了个贴:
http://bbs.csdn.net/topics/390620540

我其实就是不明白为什么要用hash算法算出个那么大的值来. 那样的话[key的hash最小值]-->[key的hash最大值]是很恐怖的. 这样的话要耗费多少内存来生成这么个数组呢?

key的hash值也不是直接拿来当数组下标用的
下面hashMap的一段代码

public V get(Object key) {
if (key == null)
return getForNullKey();
int hash = hash(key.hashCode());
for (Entry<K,V> e = table[indexFor(hash, table.length)];
e != null;
e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key
[解决办法]
key.equals(k)))
return e.value;
}
return null;
}

看table这个数组下标,是indexFor(hash, table.length)
下面是indexFor方法

static int indexFor(int h, int length) {
return h & (length-1);
}

读书人网 >J2SE开发

热点推荐