jdk 1.7引進的工具類,都是靜態調用的方法,jdk 1.8新增了部分方法
重點方法
equals
用于字符串和包裝對象的比較,先比較內存地址,再比較值
deepEquals
數組的比較,先比較內存地址,再比較值,如String、char、byte、int數組,或者包裝類型Integer等數組
hashCode
返回對象的hashCode,若傳入的為null,則返回0
hash
傳入可變參數的所有值得hashCode的總和,底層用Arrays.hashCode
可變參數
重寫HashCode和Equals
HashCode方法
頂級類Object里面的方法,所有類都是繼承Object的,返回值int類型
根據一定的hash規則(存儲地址,字段,或者長度等),映射成一個數值,即散列值
Equals方法
頂級類Object里面的方法,所有類都是繼承Object的,返回值boolean類型
根據自定義的匹配規則,用于匹配兩個對象是否一樣,一般邏輯
//判斷地址是否?樣
//?空判斷和class類型判斷
//強轉
//對象??的字段??匹配
重寫規則
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
class User { private int age; private String name; private Date time; // 省略setter和getter?法 @Override public boolean equals(Object o) { if ( this == o) return true ; if (o == null || getClass() != o.getClass()) return false ; User user = (User) o; return age == user.age && Objects.equals(name, user.name) && Objects.equals(time, user.time); } @Override public int hashCode() { return Objects.hash(age, name, time); } } |
問題:當向集合中插入對象時,如何判別在集合中是否已經存在該對象,比如Set確保存儲對象的唯一,并判斷是不是同一個對象呢?
- 依據hashCode和equals進行判斷,所以Set存儲的對象必須重寫這兩個方法
- 判斷兩個對象是否一樣,首先判斷插入obj的hashCode值是否存在,hashCode值不存在則直接插入集合,值存在則還需要判斷equals方法判斷對象是否相等
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:https://www.cnblogs.com/chenyanbin/p/13407269.html