zoukankan      html  css  js  c++  java
  • java hashCode方法返回值

    hashCode 是和内存地址相关的一个整数。

    HashCode只是在需要用到哈希算法的数据结构中才有用

    用途是为了方便快速地查找对象: HashMap 是根据键对象的 HashCode 来进行快速查找的。

    总之,重写 hashCode 是为了让 Java 中所有使用到 Hash 算法的数据结构能够正常运行

    Java 中,Object 对象的 hashCode() 方法会根据不同的对象生成不同的哈希值,默认情况下为了确保这个哈希值的唯一性,是通过该对象的内部地址转换成一个整数来实现的

    HashCode 其实只是在需要用到哈希算法的数据结构中才有用,比如在 HashMap 和 Hashtable中。

    HashCode 的用途是为了方便快速地查找对象,当你重写了 hashCode() 后,HashCode 就不再是默认的对象内部地址了,而是你自己定义的一个值。

    举个例子你或许更明白点:假如 a 和 b 是两个对象,你重写了 equals() 方法,你的目的肯定是希望它们两个相等。
    现在有一个 HashMap,它的值是这样的 map.put(a,c); map 中插入了一条数据,键是 a 值是 c,现调用 map.get(a) 可以返回对象 c,但是调用 map.get(b); 却不能返回对象 c, 而在你最开始的定义中,a 和 b 两个对象是相等的,相等的对象却得不到相同的结果,这段代码就不符合逻辑了。因为 HashMap 是根据键对象的 HashCode 来进行快速查找的,所以你必须保证 a 和 b 这两个相同对象的 HashCode 也相同,因此你需要重写 hashCode() 方法。另外,如果你要用到 HashSet,在这个例子中 a 和 b 可以同时插入到 HashSet 中,然而这两个对象在逻辑上有时相等的,这不符合 HashSet 的定义。

    总之,重写 hashCode 是为了让 Java 中所有使用到 Hash 算法的数据结构能够正常运行,当然如果你保证你的程序中完全不会用到 Hash 算法,那么你也可以不用重写。

    http://zhidao.baidu.com/link?url=8Lb9TqUUPN9f_u8WK_UQmZf5KG9LKUozz4Ar-s6snzOrygJg9VeD4T9sny3uVYqhckr0Bpo8jmV8GcPt-OuolOwPl9bHZwwBdKV-2gJvdtC

  • 相关阅读:
    Div高度百分比
    字典树模板题 POJ 2503
    POJ 2828
    POJ 2186
    HDU 3397 双lazy标记的问题
    HDU 3911 区间合并求最大长度的问题
    CodeForces 444C 节点更新求变化值的和
    POJ 3667 线段树的区间合并简单问题
    HDU 4578 线段树复杂题
    UVAlive 3211 Now or Later
  • 原文地址:https://www.cnblogs.com/ydxblog/p/5753535.html
Copyright © 2011-2022 走看看