Comparator用法

来源:互联网 发布:怎么ping ip加端口 编辑:程序博客网 时间:2024/04/29 16:12

Comparator  不同于 Comparable

java.util.Comparator

DEMO

----------------------------------------

Lake湖类

class Lake {
    private String name = "淡水湖";
    private String englishName = "lake";
    private int area = 1;
   
    public Lake(String n, String e, int a) {
        setName(n);
        setEnglishName(e);
        setArea(a);
    }
   
    public String getName() {
        return name;
    }
    public boolean setName(String n) {
        if(n != null && n.length() > 0) {
            name = n;
            return true;
        }
        return false;
    }
    public String getEnglishName() {
        return englishName;
    }
    public boolean setEnglishName(String e) {
        if(e != null && e.length() > 0) {
            englishName = e;
            return true;
        }
        return false;
    }
    public int getArea() {
        return area;
    }
    public boolean setArea(int a) {
        if(a >= 1 && a <= 10000) {
            area = a;
            return true;
        }
        return false;
    }
   
    public String toString() {
        return name + " (" + englishName + ", " + area + "平方公里)";
    }
}
-----------------------

按大小排序

import java.util.Comparator;

class AreaComparator implements Comparator<Lake> {
    public int compare(Lake k1, Lake k2) {
        return k1.getArea() - k2.getArea();
    }
}

-----------------------

按名字排序

import java.util.Comparator;

class NameComparator implements Comparator<Lake> {
    public int compare(Lake k1, Lake k2) {
        return k1.getEnglishName().compareTo(k2.getEnglishName());
    }
}

-----------------------

测试类

import java.util.*;

class FiveLakes {
    public static void main(String[] args) {
        ArrayList<Lake> lakes = new ArrayList<Lake>();
       
        lakes.add(new Lake("洞庭湖", "Dongting Lake", 2820));
        lakes.add(new Lake("太湖", "Lake Thai", 2250));
        lakes.add(new Lake("巢湖", "Chao Lake", 775));
        lakes.add(new Lake("鄱阳湖", "Po-yang Lake", 3914));
        lakes.add(new Lake("洪泽湖", "Hung-tse Lake", 1577));
       
        Collections.sort(lakes, new NameComparator());
        System.out.println("我国的五大淡水湖, 按\"英文名称\"[升序]排列如下:");
        for(int i = 0; i < 5; i++) {
            System.out.println(i+1 + ". " + lakes.get(i));
        }
       
        System.out.println();
        Collections.sort(lakes, new AreaComparator());
        Collections.reverse(lakes);
        System.out.println("我国的五大淡水湖, 按湖水面积[降序]排列如下:");
        for(int i = 0; i < 5; i++) {
            System.out.println(i+1 + ". " + lakes.get(i));
        }
    }
}

 

原创粉丝点击