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);} |
類 | 排序 |
BigDecimal,BigInteger,Byte,Double, Float,Integer,Long,Short | 按數字大小排序 |
Character | 按 Unicode 值的數字大小排序 |
String | 按字符串中字符 Unicode 值排序 |
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 + "}" ); }} |
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)); }} |
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)); }} |
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); }} |
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); }} |
先看一下使用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、可以使用多種排序標準,比如升序、降序等
新聞熱點
疑難解答