在Java HashSet中,它如何计算自定义对象的hashCode?

时间:2014-08-11 17:13:32

标签: java hashmap javadoc hashcode custom-object

如果我们不覆盖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 doc中找到它的位置?

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

  • HashSet.class
  • AbstractSet.class
  • Object.class
  • System.class

2 个答案:

答案 0 :(得分:2)

  

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

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

  

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

答案 1 :(得分:2)

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