亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

java compare 接口

2019-11-14 10:30:18
字體:
來源:轉載
供稿:網友

1.比較后,返回0,1,-1 的結果,可以用

   return (thisVal<anotherVal ? -1 : (thisVal==anotherVal ? 0 : 1));

效率更高

 

以下轉自 http://bluelzx.javaeye.com/blog/200987

 

 

1. 兩種比較接口分析在 “ 集合框架 ” 中有兩種比較接口: Comparable 接口和 Comparator 接口。 Comparable 是通用的接口,用戶可以實現它來完成自己特定的比較,而 Comparator 可以看成一種算法的實現,在需要容器集合實現比較功能的時候,來指定這個比較器,這可以看成一種設計模式,將算法和數據分 離。前者應該比較固 定,和一個具體類相綁定,而后者比較靈活,它可以被用于各個需要比較功能的類使用。一個類實現了 Camparable 接口表明這個類的對象之間是可以相互比較的。如果用數學語言描述的話就是這個類的對象組成的集合中存在一個全序。這樣,這 個類對象組成的集合就可以使用 Sort 方法排序了。而 Comparator 的作用有兩個:1 、如果類的設計師沒有考慮到 Compare 的問題而沒有實現 Comparable 接口,可以通過 Comparator 來實現比較算法進行排序;2 、為了使用不同的排序標準做準備,比如:升序、降序或其他什么序。2 Comparable 接口
public interface Comparable<T> {    public int compareTo(T o);}
java.lang. Comparable 接口定義類的自然順序,實現該接口的類就可以按這種方式排序。  1 ) int compareTo(Object o): 比較當前實例對象與對象 o ,如果位于對象 o 之前,返回負值,如果兩個對象在排序中位置相同,則返回 0 ,如果位于對象 o 后面,則返回正值。 2 )在 Java 2 SDK 版本 1.4 中有二十四個類實現 Comparable 接口。下表展示了 8 種基本類型的自然排序。雖然一些類共享同一種自然排序,但只有相互可比的類才能排序。
排序
BigDecimal,BigInteger,Byte,Double, Float,Integer,Long,Short按數字大小排序
Character按 Unicode 值的數字大小排序
String按字符串中字符 Unicode 值排序
利用 Comparable 接口創建自己的類的排序順序,只是實現 compareTo() 方法的問題。通常就是依賴幾個數據成員的自然排序。同時類也應該覆蓋 equals() 和 hashCode() 以確保兩個相等的對象返回同一個哈希碼。這個接口的作 用:如果數組或者集合中的(類)元素實現了該接口的話 , 我們就可以調用 Collections.sort 和Arrays.sort 排序,或應用于有序集合 TreeSet 和 TreeMap 中。下面設計一個有 序的類 Person ,它實現 Comparable 接口,以年齡為第一關鍵字,姓名為第二關鍵字升序排序。Person.java
package com.zj.sort.comparable; public class Person implements Comparable<Person> {    PRivate int age ;    private String name ;     public Person( int age, String name) {       this . age = age;       this . name = name;    }     public int compareTo(Person person) {       int cop = age - person.getAge();       if (cop != 0)           return cop;       else           return name .compareTo(person. name );    }     public int getAge() {       return age ;    }     public String getName() {       return name ;    }     public int hashCode() {       int result = 17;       result = 37 * result + age ;       result = 37 * result + name .hashCode();       return result;    }     public boolean equals(Object o) {       if (!(o instanceof Person))           return false ;       Person person = (Person) o;       return ( age == person. age ) && ( name .equals(person. name ));    }     public String toString() {       return ( age + "{" + name + "}" );    }}
2.1 測試 Arrays.sort ()方法ArraysSortUnit.java
package com.zj.sort.comparable;import java.util.Arrays;import com.zj.compare.Person; public class ArraysSortUnit {    public static void main(String[] args) {       Person[] ps = { new Person(20, "Tom" ), new Person(20, "Jeff" ),              new Person(30, "Mary" ), new Person(20, "Ada" ),              new Person(40, "Walton" ), new Person(61, "Peter" ),              new Person(20, "Bush" ) };       System. out .println(Arrays.toString (ps));       Arrays.sort (ps);       System. out .println(Arrays.toString (ps));    }}
結果:[20{Tom}, 20{Jeff}, 30{Mary}, 20{Ada}, 40{Walton}, 61{Peter}, 20{Bush}][20{Ada}, 20{Bush}, 20{Jeff}, 20{Tom}, 30{Mary}, 40{Walton}, 61{Peter}]2.2 測試 Collections.sort ()方法CollctionsSortUnit.java
package com.zj.sort.comparable;import java.util.Arrays;import java.util.Collections;import com.zj.compare.Person; public class CollctionsSortUnit {    public static void main(String[] args) {       Person[] ps = { new Person(20, "Tom" ), new Person(20, "Jeff" ),              new Person(30, "Mary" ), new Person(20, "Ada" ),               new Person(40, "Walton" ), new Person(61, "Peter" ),              new Person(20, "Bush" ) };       System. out .println(Arrays.toString (ps));       Collections.sort (Arrays.asList (ps));       System. out .println(Arrays.toString (ps));    }}
結果:[20{Tom}, 20{Jeff}, 30{Mary}, 20{Ada}, 40{Walton}, 61{Peter}, 20{Bush}][20{Ada}, 20{Bush}, 20{Jeff}, 20{Tom}, 30{Mary}, 40{Walton}, 61{Peter}]2.3 測試 TreeSetTreeSetUnit.java
package com.zj.sort.comparable;import java.util.TreeSet;import com.zj.compare.Person; public class TreeSetUnit {    public static void main(String[] args) {       TreeSet<Person> set = new TreeSet<Person>();       set.add( new Person(20, "Tom" ));       set.add( new Person(20, "Jeff" ));       set.add( new Person(30, "Mary" ));       set.add( new Person(20, "Ada" ));       set.add( new Person(40, "Walton" ));       set.add( new Person(61, "Peter" ));       set.add( new Person(20, "Bush" ));       System. out .println(set);    }}
結果:[20{Ada}, 20{Bush}, 20{Jeff}, 20{Tom}, 30{Mary}, 40{Walton}, 61{Peter}]2.4 測試 TreeMapTreeMapUnit.java
package com.zj.sort.comparable;import java.util.TreeMap;import com.zj.compare.Person; public class TreeMapUnit {    public static void main(String[] args) {       TreeMap<Person, String> map = new TreeMap<Person, String>();       map.put( new Person(20, "Tom" ), "Tom" );       map.put( new Person(20, "Jeff" ), "Jeff" );       map.put( new Person(30, "Mary" ), "Mary" );       map.put( new Person(20, "Ada" ), "Ada" );       map.put( new Person(40, "Walton" ), "Walton" );       map.put( new Person(61, "Peter" ), "Peter" );       map.put( new Person(20, "Bush" ), "Bush" );       System. out .println(map);    }}
結果:{20{Ada}=Ada, 20{Bush}=Bush, 20{Jeff}=Jeff, 20{Tom}=Tom, 30{Mary}=Mary, 40{Walton}=Walton, 61{Peter}=Peter} 轉自 http://www.blogjava.net/fastunit/archive/2008/04/08/191533.html三、Comparator和Comparable的區別

先看一下使用Comparator對User集合實現排序的方式:

import  java.util.Arrays;import  java.util.Comparator;public   class  UserComparator  implements  Comparator {   public   int  compare(Object o1, Object o2) {     return  ((User) o1).getAge()  -  ((User) o2).getAge();  }   /**    * 測試方法    */    public   static   void  main(String[] args) {    User[] users  =   new  User[] {  new  User( " a " ,  30 ),  new  User( " b " ,  20 ) };    Arrays.sort(users,  new  UserComparator());     for  ( int  i  =   0 ; i  <  users.length; i ++ ) {      User user  =  users[i];      System.out.println(user.getId()  +   "   "   +  user.getAge());    }  }}

一個類實現了Camparable接口則表明這個類的對象之間是可以相互比較的,這個類對象組成的集合就可以直接使用sort方法排序。Comparator可以看成一種算法的實現,將算法和數據分離,Comparator也可以在下面兩種環境下使用:1、類的設計師沒有考慮到比較問題而沒有實現Comparable,可以通過Comparator來實現排序而不必改變對象本身2、可以使用多種排序標準,比如升序、降序等


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产日韩精品在线| 久久久中文字幕| 久久韩剧网电视剧| 国产精品劲爆视频| 九九热这里只有精品免费看| 久久久亚洲精选| 97婷婷涩涩精品一区| 国产精品嫩草影院一区二区| 欧美高清一级大片| 欧美激情视频网址| 亚洲国内精品在线| 欧美人与物videos| 国产精品高潮呻吟久久av无限| 国产精品永久免费观看| 欧美激情视频在线| 亚洲无线码在线一区观看| 国产午夜精品免费一区二区三区| 欧美激情亚洲国产| 国产日本欧美一区二区三区在线| 欧美成人免费全部| 国产一区二区激情| 国产精品一区久久久| 亚洲小视频在线观看| 国产精品美女久久久久av超清| 国产精品免费一区二区三区都可以| 亚洲精品自拍第一页| 久久久久久美女| 亚洲欧美日韩一区在线| 国产在线拍揄自揄视频不卡99| 中文字幕日韩精品有码视频| 国产精品丝袜一区二区三区| 精品国产一区二区三区在线观看| 午夜精品国产精品大乳美女| 国产日韩欧美一二三区| 姬川优奈aav一区二区| 国产精品自在线| 亚洲精品美女网站| 欧美一区二区大胆人体摄影专业网站| 中文国产亚洲喷潮| 亚洲视频综合网| 国产精品丝袜视频| 国产精品福利在线观看网址| 96精品视频在线| 91高清视频在线免费观看| 中文字幕在线看视频国产欧美| 欧美专区福利在线| 色偷偷亚洲男人天堂| 亚洲人av在线影院| 欧美在线视频一区二区| 亚洲精品美女在线观看播放| 亚洲成人精品久久| 国产日韩欧美在线看| 精品欧美激情精品一区| 久久中文字幕国产| 精品国产一区二区三区久久狼5月| 免费91在线视频| 国产自摸综合网| 亚洲成色777777在线观看影院| 国产精品久久一| 2021久久精品国产99国产精品| 国产精品久久久久av免费| 国产丝袜精品第一页| 国产精品美女www爽爽爽视频| 亚洲va码欧洲m码| 国产精品第3页| 在线观看欧美日韩国产| 国产精品第8页| 欧美日韩一区免费| 日韩欧美极品在线观看| 亚洲精品国产欧美| 亚洲偷熟乱区亚洲香蕉av| 97在线免费观看| 国产一区二区三区视频免费| 亚洲无亚洲人成网站77777| 亚洲女人天堂色在线7777| 欧美大尺度在线观看| 国产精品国产三级国产aⅴ9色| 成人黄色免费看| 亚洲va国产va天堂va久久| 91亚洲国产成人久久精品网站| 国产视频精品xxxx| 欧美成人精品不卡视频在线观看| 成人在线免费观看视视频| 精品自在线视频| 日本高清不卡在线| 国产精品欧美一区二区三区奶水| 国产美女主播一区| 欧美一级免费视频| 国产精品久久77777| 国产精品va在线播放| 久久成人av网站| 亚洲免费视频在线观看| 精品性高朝久久久久久久| 欧美成人网在线| 日韩精品视频免费在线观看| 国产一区二区丝袜高跟鞋图片| 亚洲国产成人精品久久久国产成人一区| 亚洲无限av看| 亚洲国产成人久久| 欧美又大粗又爽又黄大片视频| 久久夜色精品亚洲噜噜国产mv| 久久久久久久一区二区| 久久精品男人天堂| 91国产视频在线播放| 欧美激情亚洲激情| 欧美高清在线视频观看不卡| 国产成人精品电影| 久久精品一偷一偷国产| 亚洲最大福利网| 7777免费精品视频| 国a精品视频大全| 久久久久一本一区二区青青蜜月| 欧美日韩国产一区二区| 亚洲综合成人婷婷小说| 狠狠色香婷婷久久亚洲精品| 91精品国产电影| 秋霞av国产精品一区| 欧美激情第99页| 国产精品人人做人人爽| 欧美成人精品在线视频| 色与欲影视天天看综合网| 成人欧美一区二区三区黑人| 午夜精品久久久久久久久久久久久| 亚洲精品电影在线观看| 国产精品自拍偷拍| 日韩欧美成人免费视频| 亚洲欧美综合v| 久久精视频免费在线久久完整在线看| 国产极品精品在线观看| 久久久久久久97| 92看片淫黄大片欧美看国产片| 欧美日韩亚洲精品一区二区三区| xxxxx91麻豆| 色老头一区二区三区在线观看| 国产精品7m视频| 久久久精品美女| 久久影视电视剧免费网站| 亚洲最大成人在线| 国产精品男人爽免费视频1| 精品夜色国产国偷在线| 欧美精品videosex牲欧美| 国产精品精品视频一区二区三区| 18性欧美xxxⅹ性满足| 亚洲午夜女主播在线直播| 亚洲精品久久久久久久久久久久| 精品国产成人在线| 国产在线观看精品| 成人在线一区二区| 国产黑人绿帽在线第一区| 亚洲 日韩 国产第一| 成人福利在线观看| 国产精品国模在线| 日韩精品高清视频| 亚洲国产精品美女| 久久97精品久久久久久久不卡| 国产精品视频26uuu| 日韩一级裸体免费视频| 亚洲一区国产精品| 97久久超碰福利国产精品…| 97成人精品区在线播放| 浅井舞香一区二区| 日韩欧美精品中文字幕| 久久综合久久88| 久久精品国产久精国产一老狼|