JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Software Design » Effective Java  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to topicthreaded modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 [Effective Java] 條款 11 : 考慮實現 Comparable
metavige

麥塔.米奇

版主

發文: 2133
積分: 10
於 2003-11-24 23:13 user profilesend a private message to usersend email to metavigereply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
compareTo() 是 java.lang.Comparable 介面的唯一函式
性質上與 Object 的 equals() 很相似
不過在單純的"相等比較"之外, 他還允許"次序比較"

如果某個 class 實現了 Comparable, 便是暗示其實體具有內在次序關係

在 Java 程式庫裡的所有 value classes 都實現了 Comparable


以下是 Comparable 的規格書
比較某個物件與另一指定物件的順序. 當這個物件小於 等於 大於指定物件時, 分別傳回負整數, 0, 正整數. 如果指定物件的型別不允許與這個物件進行比較, 就拋出 ClassCastException 異常

實作者必須確保, 對於所有的 x,y,z, 都能夠滿足 sgn(x.compareTo(y)) == -sgn(y.compareTo(x))
意味著 "x.compareTo(y) 拋出異常, 若且唯若(if and only if) y.compareTo(x) 拋出一個異常
.實作者必須確保數值間的關係具有遷移性, 也就是說 (x.compareTo(y)> && y.compareTo(z)>0) 意味 x.compareTo(z)>0
.實作者必須確保運算式 x.compareTo(y)==0 意味對於任意 z 而言, 運算式 sgn(x.compareTo(z)) == sgn(y.compareTo(z)) 永遠成立
.強烈建議(但不要求)滿足 (x.compareTo(y)==0) == (x.equals(y)), 一般而言, 任何實現 Comparable interface 卻違反本項條件之某個 class, 都應當明確告訴用戶這一事實, 以下是大家推薦的說明方式 "次序相等的物件並不一定相等"


如果將 Comparable interface 與 Collection 的 package 相互應用, 我想是蠻強大的
簡單的一個 Array, 如果裡面的物件都有實作 Comparable, 那只要用
1
Arrays.sort(a);
就可以搞定排序的問題了


reply to postreply to post
請各位新手參考 論壇規範Java 新手 FAQ
作者 Re:[Effective Java] 條款 11 : 考慮實現 Comparable [Re:metavige]
Yoshi

塵世中一個迷途小書僮

版主

發文: 874
積分: 22
於 2003-11-26 12:31 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
metavige wrote:
如果將 Comparable interface 與 Collection 的 package 相互應用, 我想是蠻強大的
簡單的一個 Array, 如果裡面的物件都有實作 Comparable, 那只要用
1
Arrays.sort( a);
就可以搞定排序的問題了


這東西真的很方便
昨天我在寫我的演算法作業,Fractional Knapsack問題,使用Greedy Approach解
剛好你上述的作法我全都用到了~


reply to postreply to post
YOSHI!
作者 Re:[Effective Java] 條款 11 : 考慮實現 Comparable [Re:metavige]
skyler





發文: 8
積分: 0
於 2008-05-09 14:17 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
For example, consider the Float class, whose compareTo method is inconsistent with equals.
If you create a HashSet and add new Float(-0.0f) and new Float(0.0f), the set will
contain two elements because the two Float instances added to the set are unequal when
compared using the equals method. If, however, you perform the same procedure using a
TreeSet instead of a HashSet, the set will contain only one element because the two Float
instances are equal when compared using the compareTo method. (See the Float
documentation for details.)

原文書是用Flotat 中文(侯捷)是用BigDecimal 來做的,不過實際跑時,HashSet 跟 TreeSet 結果都只會有一筆!(JDK1.4.2版)

這是JDK版本的關係所造成的嗎?
感謝!


reply to postreply to post
作者 Re:[Effective Java] 條款 11 : 考慮實現 Comparable [Re:metavige]
koji

秒速5センチメートル

站長

發文: 8415
積分: 19
於 2008-05-09 17:15 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
我看文件都是0.0f跟-0.0f都是不相等,所以都會是兩筆吧?

BigDecimal則得用"1.0" and "1.00"
看他線上是
http://books.google.com.tw/books?id=ZZOiqZQIbRMC&printsec=frontcover#PPA55,M1
用這樣勒

koji


reply to postreply to post
JCConf Taiwan 2015 開始售票了!!
Facebook上的TWJUG社團,歡迎加入
作者 Re:[Effective Java] 條款 11 : 考慮實現 Comparable [Re:metavige]
skyler





發文: 8
積分: 0
於 2008-05-12 13:54 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
實測的結果
JDK 1.5以上的就不會有這種問題
JDK 1.5以下才會有書中所寫的情況


reply to postreply to post
» JWorld@TW »  Software Design » Effective Java

reply to topicthreaded modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8