Comparable接口和Comparator接口的區別和使用

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方法

待續。。。 。。。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章