導讀: 在平時的coding中hashCode()和equals()的使用的場景有哪些?clone深復制怎么實現?wait()和notify()有什么作用?finalize()方法干嘛的?看似coding中使用的不多,不重要,但是有沒有跟我一樣,想好好的了解一下的。畢竟是基礎中的基礎。下面給出一個簡單比較全面的概要:
public boolean equals(Object obj) {return (this == obj);}
public native int hashCode();
當equals()方法被override時,hashCode()也要被override.
當equals()返回true,hashcode一定相等。即:相等(相同)的對象必須具有相等的哈希碼(或者散列碼)
如果兩個對象的hashCode相同,它們并不一定相同。
在集合查找時,hashcode能大大降低對象比較次數,提高查找效率!
在判斷重復元素時,直接通過hashcode()方法,定位到桶位置,如果該位置有元素,再調用equals()方法判斷是否相等。而不是遍歷每一個元素比較equals()!
只有獲得該對象鎖之后才能調用,否則拋IllegalMonitorStateException
異常
任何一個時刻,對象的控制權(monitor)只能被一個線程擁有。
線程取得控制權的方法有三:
執行對象的某個同步實例方法。
執行對象對應類的同步靜態方法。
執行對該對象加同步鎖的同步塊。
執行對該對象加同步鎖的示例:
synchronized (pepoleObject) { pepoleObject.notifyAll(); pepoleObject.wait(); }當垃圾回收器確定不存在對該對象的更多引用時,由對象的垃圾加收器調用此方法,只能調用一次。當對象被回收時需要配置系統資源或執行其他清除,子類重寫finalize方法實現。
新聞熱點
疑難解答