HashMap中的键是唯一的,它确定键的唯一性是通过hashCode()和equals()方法确定的。
当该集合的对象调用put()时,会调用该对象的hashcode()方法,
如果返回的哈希值在该HashMap集合中键对应的哈希值中不存在,则调用equals()方法,当equals()方法返回true时,存入,否则存入失败;
如果返回的哈希值在该HashMap集合中键对应的哈希值中存在,则不调用equals()方法,直接存入失败。
Object类的equals和hashcode方法是比较内存地址,如果双方具有相同内存地址,则equals和hashcode都相同。
重写hashcode()目的是使相同的对象具有相同的哈希值。如果按上面代码中重写hashcode的算法,大概能保证相同的对象具有相同的哈希值,不同的对象具有不同的哈希值。为确保键确实唯一,需要重写equals方法再验证一次两个对象的name和age是否相等。
这样,用hashcode()和equals()两个维度确保如果是相同的对象,就不会存放了。 |