ArrayList:通过对象的equals方法ArrayList中是直接通过equals方法判断元素是否相同,contains方法和remove方法都会去调用到equals方法,
因为对象类中没有equals方法,而是继承Object类中的equals方法,Object类中的equals方法是对比的是地址值,所以对象的类中要重写Object类中equals方法
HashSet:通过对象的hashCode方法和equals方法
HashSet中先去判断元素的HashCode值相同。就返回false,就不会调用元素的equals方法,如果元素的hashcode值相同,才调用equals方法。
而HashSet的存储是根据哈希表,如果一个对象的哈希值相同就认为是同一元素,如果对象都是new出来的,那么哈希值始终都不会唯一,所以对象的类中要复写hashCode,
而哈希值唯一了不代表实际的内容是唯一的,因此还需要复写equals方法
|
|