objects.hash(“a”)和objects.hashcode(“a”)

z1246879396 2016-11-05 10:49:31
如题:
public class test {
public static void main(String[] args){
String a = "a";
System.out.println(a.hashCode());
System.out.println(Objects.hashCode("a"));
System.out.println(Objects.hash(a));
}

}

result:
97
97
128
...全文
525 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
little_how 2016-11-08
  • 打赏
  • 举报
回复
1.hashCode是每个Object都存在的方法,String重写了。 2.hash是使用你对象的hashCode进行hash运算后获得的结果,最典型的应用于hashmap和hashset等地方 Objects提供了获取对象的hashCode以及可以根据hashCode计算出hash值。 最简单的hash元算 如:hashCode=13, mod=3, hashCode % mod = 1; 当然Objects中和hashmap中的hash运算都用到了移位来防止造成大面积hash冲突。 希望解释清楚了....
sky_08_06_02 2016-11-08
  • 打赏
  • 举报
回复
Objects ?
自由自在_Yu 2016-11-08
  • 打赏
  • 举报
回复
Objects中hash()函数这样的
public static int hash(Object... values) {
        return Arrays.hashCode(values);
    }
这里调用的Arrays中hashCode()函数是这样的
public static int hashCode(Object a[]) {
        if (a == null)
            return 0;

        int result = 1;

        for (Object element : a)
            result = 31 * result + (element == null ? 0 : element.hashCode());

        return result;
    }
从上面代码可以看出,传入参数a是,return result 的值是31*1 + a的hashCode值 就是31+97=128
  • 打赏
  • 举报
回复

public int hashCode() {
        int h = hash;
        if (h == 0 && value.length > 0) {
            char val[] = value;

            for (int i = 0; i < value.length; i++) {
                h = 31 * h + val[i];
            }
            hash = h;
        }
        return h;
    }

//
 public static int hashCode(final Object o) {
        return o == null ? 0 : o.hashCode();
    }
//调用用这两个方法都是获取a的 hashcode的值 a====>97
z1246879396 2016-11-07
  • 打赏
  • 举报
回复
引用 1 楼 qq_22158335 的回复:

public int hashCode() {
        int h = hash;
        if (h == 0 && value.length > 0) {
            char val[] = value;

            for (int i = 0; i < value.length; i++) {
                h = 31 * h + val[i];
            }
            hash = h;
        }
        return h;
    }

//
 public static int hashCode(final Object o) {
        return o == null ? 0 : o.hashCode();
    }
//调用用这两个方法都是获取a的 hashcode的值 a====>97
多谢关注,你说的hashcode对于String类的计算方法我知道,这个里面主要的问题是hashcode()函数和hash()函数的区别?为什么得到的结果不一样呢?
 本次课程会带着大家学习Hash算法,从源码的角度去学习算法,更加容易理解的方式去学习,能够更高效的吸收学到的内容,也能培养出能够独自看源码,分析源码的能力。Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。  哈希表是根据设定的哈希函数H(key)和处理冲突方法将一组关键字映射到一个有限的地址区间上,并以关键字在地址区间中的象作为记录在表中的存储位置,这种表称为哈希表或散列,所得存储位置称为哈希地址或散列地址。作为线性数据结构与表格和队列等相比,哈希表无疑是查找速度比较快的一种。  通过将单向数学函数(有时称为“哈希算法”)应用到任意数量的数据所得到的固定大小的结果。如果输入数据中有变化,则哈希也会发生变化。哈希可用于许多操作,包括身份验证和数字签名。也称为“消息摘要”。  简单解释:哈希(Hash)算法,即散列函数。它是一种单向密码体制,即它是一个从明文到密文的不可逆的映射,只有加密过程,没有解密过程。同时,哈希函数可以将任意长度的输入经过变化以后得到固定长度的输出。哈希函数的这种单向特征和输出数据长度固定的特征使得它可以生成消息或者数据。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧