一、背景 Hi,大家!我是 @馬哥python說 ,一名10年程式猿。 今天我來演示一下:通過百度AI開放平臺,利用python調用百度介面進行中文情感傾向分析,並得出情感極性分為積極、消極還是中性以及置信度結果。 二、操作步驟 首先,打開百度AI首頁:百度AI開放平臺-全球領先的人工智慧服務平臺 ...
所有類預設繼承Object類 先看一下Object源碼
package java.lang;
public class Object {
//預設調用本地的hashcode()方法 根據記憶體地址生成hash值 避免不了哈希衝突
public native int hashCode();
//預設調用的equals方法比較的是'=='比較
//基本類型比較的是兩者的值是否相同 而引用類型比較兩者的是引用地址(對象)是否相同
public boolean equals(Object obj) {
return (this == obj);
}
}
結論
- equals()返回結果為true hashCode()一定相同
- '=='結果為true hashCode()一定相同
- '=='結果為false hashCode()有可能相同(哈希衝突)
hashCode()重寫規範就是保證equals()相同的兩個對象擁有相同的哈希值
回到剛剛哪個問題 為什麼重寫equals還要重寫hashCode()?
public class per {
private String name;
private int age;
public per(String name, int age) {
this.name = name;
this.age = age;
}
public boolean equals(Object o){
if (this==o)return true;
if (o==null||o.getClass()!=this.getClass())return false;
per o1 = (per) o;
return o1.name==name&&o1.name!=null&&o1.name.equals(this.name)&&age=o1.age;
}
public int hashCode(){
return Objects.hash(name,age);
}
/*
這是Object類中的規範如果不同時重寫將會導致很多類庫出現業務不一致!
例如HashMap無法保證key值'唯一性'
下麵測試代碼p1和p2雖然地址不同 但是業務上看內容是相同的
所以應該只用一個key表示 但是不重寫將無法正確插入!
*/
}
class Example{
public static void main(String[] args) {
per p1 = new per("張三", 18);
per p2 = new per("張三", 18);
HashMap<per,Integer> map = new HashMap<>();
map.put(p1,1);
map.put(p2,2); //具體原理可以看put(k,v)源碼!
}
}