麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

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、可以使用多種排序標準,比如升序、降序等


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黄色片观看 | 黄色的视频在线观看 | 91九色论坛 | 成人一区二区三区在线 | 999久久国精品免费观看网站 | 91香蕉国产亚洲一区二区三区 | 成人毛片视频免费看 | 中国产一级毛片 | 精品久久久久久久久中文字幕 | 激情影院在线观看 | 午夜视频国产 | 毛片大全在线观看 | 成人午夜激情视频 | 在线成人免费观看视频 | 羞羞的网站 | 男女羞羞视频在线免费观看 | 久久国语对白 | 欧美中文字幕一区二区三区亚洲 | 中国a毛片 | 国产第一页精品 | 97久久日一线二线三线 | 中文字幕激情 | 中文字幕在线视频日本 | 中文字幕欧美亚洲 | 午夜视频久久久 | 成人在线视频免费观看 | 国产二区三区在线播放 | 91精品中文字幕 | 国产精品一区二区三区在线看 | 精品无吗乱吗av国产爱色 | 欧美爱爱一区二区 | 精品三区视频 | fc2国产成人免费视频 | 国产精品9191 | 欧美日韩高清一区 | 黄色网欧美 | 有色视频在线观看 | 香蕉久久久久久 | 久久另类视频 | 黄色片网站免费在线观看 | 中文字幕网在线 |