首页 > 其他 > 详细

hashcode解析

时间:2014-12-07 12:29:16      阅读:364      评论:0      收藏:0      [点我收藏+]

String类的hashcode:

需要说明一下的是:如果没有调用过hashCode(),那么hash的值为0。容易知道这里的value也就是真正保存的字符串的值(也就是“字符串测试”)的char数组,而每个char的值是多少呢?很容易验证:Unicode。

public final class String
{
    private final char value[];     // 保存的字符串
    private final int offset;       // 开始的位置
    private final int count;        // 字符数目
    private int hash;           // 缓存的hash值

public int hashCode() {
    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;
    }
}

重写Object中的hashcode方法:

@Override
public int hashCode(){
    final int prime = 31;
    int result = 1;
    result = result*prime+id;    //id是int型,没有hashcode方法
    result = prime*result+((name==null)?0:name.hashCode());//name是String类型,有hashcode方法
    return result;
}

hashcode解析

原文:http://www.cnblogs.com/yjtm53/p/4149226.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!