compare用法java,Java经典用法总结
在Java編程中,有些知識并不能僅通過語言規范或者標準API文檔就能學到的,本文為大家羅列。
一、實現
1、現equals()
?
參數必須是Object類型,不能是外圍類。
foo.equals(null) 必須返回false,不能拋NullPointerException。(注意,null instanceof 任意類 總是返回false,因此上面的代碼可以運行。)
基本類型域(比如,int)的比較使用 == ,基本類型數組域的比較使用Arrays.equals()。
覆蓋equals()時,記得要相應地覆蓋 hashCode(),與 equals() 保持一致。
2、現hashCode()
?
當x和y兩個對象具有x.equals(y) == true ,你必須要確保x.hashCode() == y.hashCode()。
根據逆反命題,如果x.hashCode() != y.hashCode(),那么x.equals(y) == false 必定成立。
你不需要保證,當x.equals(y) == false時,x.hashCode() != y.hashCode()。但是,如果你可以盡可能地使它成立的話,這會提高哈希表的性能。
hashCode()最簡單的合法實現就是簡單地return 0;雖然這個實現是正確的,但是這會導致HashMap這些數據結構運行得很慢。
3、實現compareTo()
?
總是實現泛型版本 Comparable 而不是實現原始類型 Comparable 。因為這樣可以節省代碼量和減少不必要的麻煩。
只關心返回結果的正負號(負/零/正),它們的大小不重要。
Comparator.compare()的實現與這個類似。
4、實現clone()
?
使用 super.clone() 讓Object類負責創建新的對象。
基本類型域都已經被正確地復制了。同樣,我們不需要去克隆String和BigInteger等不可變類型。
手動對所有的非基本類型域(對象和數組)進行深度復制(deep copy)。
實現了Cloneable的類,clone()方法永遠不要拋CloneNotSupportedException。因此,需要捕獲這個異常并忽略它,或者使用不受檢異常(unchecked exception)包裝它。
不使用Object.clone()方法而是手動地實現clone()方法是可以的也是合法的。
二、預防性檢測
1、預防性檢測(Defensive checking)數值
?
不要認為輸入的數值都是正數、足夠小的數等等。要顯式地檢測這些條件。
一個設計良好的函數應該對所有可能性的輸入值都能夠正確地執行。要確保所有的情況都考慮到了并且不會產生錯誤的輸出(比如溢出)。
2、預防性檢測對象
?
不要認為對象參數不會為空(null)。要顯式地檢測這個條件。
3、預防性檢測數組索引
?
不要認為所以給的數組索引不會越界。要顯式地檢測它。
4、預防性檢測數組區間
?
不要認為所給的數組區間(比如,從off開始,讀取len個元素)是不會越界。要顯式地檢測它。
三、數組
1、填充數組元素
使用循環:
?
2、復制一個范圍內的數組元素
使用循環:
?
3、調整數組大小
使用循環(擴大規模):
?
使用循環(減小規模):
?
(優先)使用標準庫的方法:
?
4、把4個字節包裝(packing)成一個int
?
5、把int分解(Unpacking)成4個字節
?
總是使用無符號右移操作符(>>>)對位進行包裝(packing),不要使用算術右移操作符(>>)。
以上就是本文的全部內容,希望對大家的學習有所幫助。
總結
以上是生活随笔為你收集整理的compare用法java,Java经典用法总结的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle 依据日期查询,Oracle
- 下一篇: java美元兑换,(Java实现) 美元