Java 比较方法汇总 ---- Comparable

Java 比较方法汇总

一、 排序接口

1、 类中实现接口Comparable, 调用compareTo方法: 如果 返回值大于0,则将大的数放后面;如果返回值等于0,则不做任何处理; 如果返回值小于0, 则将小的数放前面。也就是说 java默认的排序方式是升序排序

package com.m;

import java.io.Serializable;
import java.util.Collections;

public class MyTestClass implements Comparable, Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private Integer id;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public static long getSerialversionuid() {
        return serialVersionUID;
    }


    /**
     * 返回值为正数,表明this中的id大于myTestClass中的id, 排序时将大的数移至后面
     * 返回值为0,表明this中的id等于myTestClass中的id
     * 返回值为负数,表明this中的id小于myTestClass中的id
     */
    @Override
    public int compareTo(MyTestClass myTestClass) {
        if (myTestClass == null) return -1;

        if (this.id == null) return 1;

        if (myTestClass.getId() == null) return -1;

        return this.getId().compareTo(myTestClass.getId());
    }

}

二 、 List排序方法
1、 调用 Collections.sort(): 实质是调用Arrays.sort

2、 调用 Arrays.sort()

三、 Map排序方法
1、 按照key排序

/**
     * 使用 Map按key进行排序
     * @param map
     * @return
     */
    public static Map sortMapByKey(Map map) {
        if (map == null || map.isEmpty()) {
            return null;
        }

        Map sortMap = new TreeMap(
                new MapKeyComparator());

        sortMap.putAll(map);

        return sortMap;
    }
//比较器类
class MapKeyComparator implements Comparator{

    @Override
    public int compare(String str1, String str2) {

        return str1.compareTo(str2);
    }
}

2、 按照value排序

 /**
     * 使用 Map按value进行排序
     * @param map
     * @return
     */
    public static Map<String, String> sortMapByValue(Map<String, String> oriMap) {
        if (oriMap == null || oriMap.isEmpty()) {
            return null;
        }
        Map<String, String> sortedMap = new LinkedHashMap<String, String>();
        List<Map.Entry<String, String>> entryList = new ArrayList<Map.Entry<String, String>>(
                oriMap.entrySet());
        Collections.sort(entryList, new MapValueComparator());

        Iterator<Map.Entry<String, String>> iter = entryList.iterator();
        Map.Entry<String, String> tmpEntry = null;
        while (iter.hasNext()) {
            tmpEntry = iter.next();
            sortedMap.put(tmpEntry.getKey(), tmpEntry.getValue());
        }
        return sortedMap;
    }
//比较器类
class MapValueComparator implements Comparator<Map.Entry<String, String>> {

    @Override
    public int compare(Entry<String, String> me1, Entry<String, String> me2) {

        return me1.getValue().compareTo(me2.getValue());
    }
}

参考1
参考2

你可能感兴趣的:(java基础)