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