日期:2014-05-20  浏览次数:20816 次

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);
    }