Skip to content

Commit c5abf5c

Browse files
committed
change note
1 parent a9cd875 commit c5abf5c

2 files changed

Lines changed: 4 additions & 2 deletions

File tree

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ Github项目主页:https://github.com/NotFound9/interviewGuide
4040
- [8.Java中的访问控制符有哪些?](docs/JavaBasic.md#Java中的访问控制符有哪些?)
4141
- [9.Java的构造器有哪些特点?](docs/JavaBasic.md#Java的构造器有哪些特点?)
4242
- [10.Java中的内部类是怎么样的?](docs/JavaBasic.md#Java中的内部类是怎么样的?)
43+
- [11.Java中的注解是什么?](docs/JavaBasic.md#Java中的注解是什么?)
44+
- [12.为什么hashCode()和equal()方法要一起重写?](docs/JavaBasic.md#为什么hashCode()和equal()方法要一起重写?)
4345
* 容器
4446
- [ArrayList和LinkedList](docs/ArrayList.md)
4547
- [1.ArrayList与LinkedList的区别是什么?](docs/ArrayList.md#ArrayList与LinkedList的区别是什么?)

docs/JavaBasic.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323

2424
#### [11.Java中的注解是什么?](#Java中的注解是什么)
2525

26+
#### [12.为什么hashCode()和equal()方法要一起重写?](#为什么hashCode()和equal()方法要一起重写?)
2627

2728

2829
### Java中的多态是什么?
@@ -366,6 +367,7 @@ class2 is class com.test.Son
366367

367368
PS:无论是使用哪种方式来获取类关联的Class对象,类都是只会加载一次,如果获取Class对象时,不会重复加载类。
368369

370+
### 为什么hashCode()和equal()方法要一起重写?
369371
#### hashCode()和equal()方法
370372

371373
可以看到Obejct类中的源码如下,可以看到equals()方法的默认实现是判断两个对象的内存地址是否相同来决定返回结果。
@@ -398,8 +400,6 @@ PS:无论是使用哪种方式来获取类关联的Class对象,类都是只会
398400
所以hashCode不相等可以作为两个对象不相等的快速判断条件。
399401

400402
在往HashMap中添加一个键值对时,计算得到数组下标后,会遍历数组下标下存储的链表中,拿key的hashCode与每个节点的hashCode进行比较,相等时,才调用equal()方法进行继续调用,节约时间。(在一些类的equal()方法的自定义实现中也会对hashCode进行判断)。
401-
402-
#### 为什么如果要重写,hashCode()和equal()方法要一起重写?
403403

404404
##### 假如只重写hashCode()方法(结果:HashMap无法保证去重)
405405

0 commit comments

Comments
 (0)