HashMap使用Key对象的hashCode()和equals()方法去决定key-value对的索引。当我们试 着从HashMap中获取值的时候,这些方法也会被用到。如果这些方法没有被正确地实现,在 这种情况下,两个不同Key也许会产生相同的hashCode()和equals()输出,HashMap将会认 为它们是相同的,然后覆盖它们,而非把它们存储到不同的地方。同样的,所有不允许存储重 复数据的集合类都使用hashCode()和equals()去查找重复,所以正确实现它们非常重要。 equals()和hashCode()的实现应该遵循以下规则:

(1)如果o1.equals(o2),那么o1.hashCode() == o2.hashCode()总是为true的。

(2)如果o1.hashCode() == o2.hashCode(),并不意味着o1.equals(o2)会为true。