8-22 面经学习记录
Java基础复习
- 说一说hashCode()和equels()之间的关系
- 如果两个对象的哈希码相等,那么两个对象不一定相等
- 如果两个对象equels()返回真,那么两个对象一定相等
- 因此两个对象equels()返回真,那么他们的哈希码必须实现相等
- 应用的场景:HashSet实现Set接口的方式。Set中存储的是不重复的对象,当向Set中加入对象时,需要判断Set中是否存在对象,如果使用遍历判断,会使得效率降低,可以首先获取对象的哈希码,将对象散列到集合的某个具体位置,然后再使用equels()对对象进行比较。
- hashCode() & equels()
- 为什么要重写hashCode()和equels()方法
- 由于Objdect的equels()的默认实现方式是通过==符号实现的,也就是说,只有当两个对象的是同一个对象(地址相同时)才是同一个对象。由此通常会重写一个类的equels()方法,比如将其重写为,当两个对象中的所有属性或者某个属性相等,则判断为这两个对象为同一个对象。
- 由于hashCode()服务于equels()方法,两者之间具有紧密的管理,因此当重写了equels()之后,表明对象的判断方式改变,因此hashCode()也需要重写。
- **注意:**String类型被final修饰,当String的值改变时,其地址也会同时改变,JVM维护了一个字符串线程池,其中产生的字符内容和地址是唯一对应的,也就是地址相等,内容则一致,内容一致那么地址也相等,因此在使用String类型作为key关键字时,不用改变默认的equels()和hashCode()方法实现。
- hashCode() & equels()的重写
- String 与 哈希