1

如果我们不覆盖 hashCode(),它如何默认为自定义对象计算 hashCode?
IE

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
  • 抽象集类
  • 对象类
  • 系统类
4

2 回答 2

2

如果我们不覆盖 hashCode(),它如何默认为自定义对象计算 hashCode?

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

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

于 2014-08-11T17:15:04.107 回答
2

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

于 2014-08-11T17:16:02.067 回答