从字符串的hashCode()看到得出的int比较大,想到哈希表是由数组来实现的,会不会就是根据hashCode直接构造数组.从JDK源码看,似乎并不是这样的,但仍不明白其实现的方法,所以提出此问题请教.
用长的字符串做哈希表的key会不会造成内存空间占用过多?

解决方案 »

  1.   

    不会!但是计算hashCode会慢一点
    对空间不会有任何的额外开销!
      

  2.   

    哦~谢谢.字符串的hash算法是怎么个实现的呢?哈希表存的是什么样的数组?
      

  3.   

    int h = hash;
    if (h == 0) {
        int off = offset;
        char val[] = value;
        int len = count;            for (int i = 0; i < len; i++) {
                    h = 31*h + val[off++];
                }
                hash = h;
            }
            return h;
    也就是把所有的字符考虑在内,而且顺序也考虑在内了,为了保证更好的性能(离散性)哈西表的数组大小和key的哈西值没有关系,和放入哈西表的元素的数量有关。
    但是离散的哈西值可以提高哈西表的性能!