不同类型底层的hashCode方法

不同类型底层的hashCode方法

Integer

public static int hashCode(int value) {
        return value;//返回的就是底层包装的基本数据类型int对应的数值value
    }

Double

public int hashCode() {
        return Double.hashCode(value);
    }
public static int hashCode(double value) {
        long bits = doubleToLongBits(value);
        return (int)(bits ^ (bits >>> 32));
    }

String

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

自定义类Student

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

如何减少冲突?

  1. 将主数组 长度变大
  2. 优化计算位置的函数。
  3. hashCode()和equals()方法调用几次,什么时候调用?
    • hashCode每次都调用,equals只有在冲突的时候(在同一位置)上,才调用。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • java.lang.Object类中有两个非常重要的方法: 1publicbooleanequals(Object...
    小陈阿飞阅读 707评论 1 1
  • 5继承 5.1 类、超类和子类 重用部分代码,并保留所有域。“is-a”关系,用extends表示。 已存在的类被...
    我快要上天啦阅读 851评论 1 3
  • equals()和hashCode()区别? equals():反映的是对象或变量具体的值,即两个对象里面包含的值...
    墨雨轩夏阅读 746评论 0 17
  • 1.import static是Java 5增加的功能,就是将Import类中的静态方法,可以作为本类的静态方法来...
    XLsn0w阅读 1,277评论 0 2
  • 面向对象主要针对面向过程。 面向过程的基本单元是函数。 什么是对象:EVERYTHING IS OBJECT(万物...
    sinpi阅读 1,102评论 0 4