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

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

java compare 接口

2019-11-14 09:54:33
字體:
來源:轉載
供稿:網友

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
丝袜美腿亚洲一区二区| 欧美在线不卡区| 亚洲天堂av电影| 亚洲免费一在线| 日韩久久精品成人| 欧美综合国产精品久久丁香| 欧美黑人极品猛少妇色xxxxx| 日韩视频在线免费观看| xxav国产精品美女主播| 欧美国产第二页| 国产一区香蕉久久| 成人信息集中地欧美| 精品福利在线观看| 亚洲精品www久久久| 国产91精品高潮白浆喷水| 中文字幕日韩欧美在线| 亚洲已满18点击进入在线看片| 成人国内精品久久久久一区| 日韩精品在线观看视频| 久久的精品视频| 亚洲性视频网站| 成人h猎奇视频网站| 奇门遁甲1982国语版免费观看高清| 欧美视频在线观看免费网址| 亚洲美女又黄又爽在线观看| 日韩欧美在线国产| 久久亚洲精品成人| 久久不射热爱视频精品| 国产偷国产偷亚洲清高网站| 欧美丰满少妇xxxxx| 57pao成人永久免费视频| 欧美一级大胆视频| 国产成人自拍视频在线观看| 色婷婷av一区二区三区在线观看| 91欧美视频网站| 亚洲男人av在线| 97超碰国产精品女人人人爽| 亚洲精品一区二三区不卡| 92看片淫黄大片欧美看国产片| 久久久久久久成人| 91精品国产91久久久久久最新| 91chinesevideo永久地址| 欧美一级视频免费在线观看| 亚洲综合国产精品| 欧美精品一区二区免费| 日韩视频亚洲视频| 国产精品视频永久免费播放| 91成人国产在线观看| 成人免费看吃奶视频网站| 亚洲欧美国产另类| 欧美一级片免费在线| 日韩欧美在线一区| 国产精品99蜜臀久久不卡二区| 456亚洲影院| 国产日本欧美一区| 日韩电视剧在线观看免费网站| 日韩精品在线免费播放| 8x海外华人永久免费日韩内陆视频| 久久久人成影片一区二区三区观看| 美女国内精品自产拍在线播放| 欧美成人亚洲成人日韩成人| 日韩精品中文字幕视频在线| 久久久久成人网| 欧美在线视频在线播放完整版免费观看| 热久久美女精品天天吊色| 91黑丝高跟在线| 欧美大片大片在线播放| 国产精品久久久久久av| 最新国产精品亚洲| 亚洲区免费影片| 亚洲欧美成人在线| 美日韩精品免费观看视频| 国产精品福利无圣光在线一区| 91国偷自产一区二区三区的观看方式| 成人免费大片黄在线播放| 黄色一区二区三区| 亚洲欧美成人精品| 欧美激情性做爰免费视频| 亚洲va久久久噜噜噜| 夜夜嗨av一区二区三区四区| 欧美国产日韩在线| 中文字幕av一区中文字幕天堂| 91成品人片a无限观看| 欧美裸体男粗大视频在线观看| 狠狠躁夜夜躁人人躁婷婷91| 亚洲品质视频自拍网| 国产69精品久久久| 成人黄色av免费在线观看| 97超级碰碰碰久久久| 亚洲高清一区二| 欧美亚洲另类激情另类| 欧美一区深夜视频| 成人国产精品久久久久久亚洲| 91精品久久久久久久久中文字幕| 成人黄色免费在线观看| 国产成人在线播放| 欧美不卡视频一区发布| 91老司机精品视频| 亚洲精品动漫久久久久| 欧美亚洲日本黄色| 亚洲精品视频网上网址在线观看| 亚洲第一二三四五区| 欧美国产日韩视频| 久久久久久久久久av| 国产精品爽爽ⅴa在线观看| 久久精品人人做人人爽| 亚洲最大福利视频| 亚洲成年人在线播放| 亚洲无限乱码一二三四麻| 欧美精品久久久久久久久| 日韩欧美精品在线观看| 欧美中文在线观看国产| 国产日韩亚洲欧美| 插插插亚洲综合网| 亚洲视频专区在线| 久久国产精品视频| 欧美与黑人午夜性猛交久久久| 国产人妖伪娘一区91| 国产欧亚日韩视频| 亚洲欧美精品中文字幕在线| 91精品国产91久久久久| 91亚洲精品久久久| 亚洲成人三级在线| 91久热免费在线视频| 亚洲人成77777在线观看网| 一区二区欧美激情| 亚洲欧美激情另类校园| 国产欧美日韩免费| 日韩av免费在线看| 亚洲美女性生活视频| 国产精品99一区| 欧美精品日韩三级| 国产精品扒开腿做爽爽爽男男| 成人欧美一区二区三区黑人| 国产精品88a∨| 日韩激情第一页| 国产ts人妖一区二区三区| 一区二区在线视频| 91最新在线免费观看| 久久久电影免费观看完整版| 久久这里有精品视频| 久久精品国产精品亚洲| 亚洲视频在线观看网站| 久久影视电视剧凤归四时歌| 黄色一区二区在线观看| 97超级碰碰碰| 91精品国产91久久| 国产精品香蕉av| 国产精品免费久久久久久| 91精品久久久久久综合乱菊| 欧美特级www| 亚洲人成啪啪网站| 欧美黑人国产人伦爽爽爽| 精品伊人久久97| 热久久视久久精品18亚洲精品| 欧美激情免费看| 色综合久久精品亚洲国产| 国产精品美腿一区在线看| 欧美激情成人在线视频| 亚洲人a成www在线影院| 国产精品入口免费视频一| 人妖精品videosex性欧美| 91网站免费看| 色婷婷av一区二区三区在线观看|