Comparable接口和Comparator接口的區別
1.Comparator位於包java.util下,而Comparable位於包java.lang下。
2.Comparable接口將比較代碼嵌入需要進行比較的類的自身代碼中,而Comparator接口在一個獨立的類中實現比較。
3.Comparable接口強制進行自然排序,而Comparator接口不強制進行自然排序,可以指定排序順序。
Comparator接口使用
一,定義一個java類對象
public class User {
private String userId;
private String userName;
private String userAge;
private String userAlias;
private String sex;
}
二,使用comparator重寫compare方法,進行排序(升序降序都可以),使用方法如下:
再次強調:Comparable接口將比較代碼嵌入需要進行比較的類的自身代碼中,而Comparator接口在一個獨立的類中實現比較。
package com.hg.demo;
import com.hg.demo.test.User;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
public class Test {
public static void main(String[] args) {
List<User> list = new ArrayList<>();
User user1 = new User("3","a341r","33","陳三","男");
User user2 = new User("7","eff3","31","阿貓","男");
User user3 = new User("5","q44t","5","阿狗","男");
User user4 = new User("9","a2f4","83","張三","男");
list.add(user1);
list.add(user2);
list.add(user3);
list.add(user4);
Collections.sort(list, new Comparator<User>() {
@Override
public int compare(User o1, User o2) {
/**
* 一:字符串比較
* 升序:o1-o2
* 降序:o2-o1
* 使用默認的時區和locale ,指定爲中國locale
*/
/* Collator collator = Collator.getInstance(Locale.CHINA);
int value = collator.compare(o1.getUserName(),o2.getUserName());
if(value>0){
return 1;
}else if(value<0){
return -1;
}else{
return 0;
}*/
/**
* 二:數字比較
* 升序:o1-o2
* 降序:o2-o1
*/
return Integer.valueOf(o2.getUserId())-Integer.valueOf(o1.getUserId());
}
});
for (User u : list) {
System.out.println(u.getUserId()+"--"+u.getUserName()+"--"+u.getUserAge()+"--"+u.getUserAlias());
}
}
}
輸出結果:
Comparable接口使用
類必須實現Comparable接口,必須重寫compareTo方法
待續。。。 。。。