代码之家  ›  专栏  ›  技术社区  ›  Zhaonan

在Java HashSet中,如何计算自定义对象的hashCode?[副本]

  •  1
  • Zhaonan  · 技术社区  · 10 年前

    如果我们不重写hashCode(),默认情况下它如何计算自定义对象的hashCode?

    class TrieNode {
        Character letter;
        TrieNode parent;
        Map<Character, TrieNode> children;
        boolean isEndOfWord;
        TrieNode(Character letter, TrieNode parent, boolean isEndOfWord) {
            this.letter = letter;
            this.parent = parent;
            this.isEndOfWord = isEndOfWord;
            children = new HashMap<Character, TrieNode>();
        }
    }
    

    用法:

    Set<TrieNode> set = new HashSet<TrieNode>();
    TrieNode trieNode = new TrieNode('c', parentNode, true);
    set.add(trieNode);
    


    注:
    • 如果我们不重写“hashCode()”。

    澄清问题:

    • 默认情况下,此HashSet如何计算此自定义的hashCode 对象
    • 在Java文档中的何处可以找到它?

    附加:
    我试图在Java文档中找到它,但没有找到。
    我试着找到这些地方:

    • HashSet.class
    • 抽象集类
    • 对象类
    • 系统类
    2 回复  |  直到 10 年前
        1
  •  2
  •   Elliott Frisch    10 年前

    如果我们不重写hashCode(),默认情况下它如何计算自定义对象的hashCode?

    它使用 hashCode() 方法。本质上它是一个参考地址。这个 Javadoc 说,

    在合理实用的情况下,类Object定义的hashCode方法确实为不同的对象返回不同的整数。(这通常通过将对象的内部地址转换为整数来实现,但JavaTM编程语言不需要这种实现技术。)

        2
  •  2
  •   Kumar Abhinav    10 年前

    所有类都扩展 Object 具有 hashcode ()方法。它通常在转换Object的内部地址时返回一个不同的值,但这不是必需的