package com.yq1012.set;
/*为了比较,让自己的类实现Comparable接口,按照自己想要的排序方式重写compareTo
 *Map只是提供了对键的排序,但是当我们需要对值排序时就的提供我们自己的比较器 这里 只是模拟了Map但是实际上并没有使用Map
 */
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class SortByValue {
    public static void main(String[] args) {
        Set<Pair> set = new TreeSet<Pair>();
        set.add(new Pair("me", "1000"));
        set.add(new Pair("and", "4000"));
        set.add(new Pair("you", "3000"));
        set.add(new Pair("food", "10000"));
        set.add(new Pair("hungry", "5000"));
        set.add(new Pair("later", "6000"));
        set.add(new Pair("myself", "1000"));
        for (Iterator<Pair> i = set.iterator(); i.hasNext();)
            // 我喜欢这个for语句
            System.out.println(i.next());
    }
}
class Pair implements Comparable<Object> {
    private final String name;
    private final int number;
    public Pair(String name, int number) {
        this.name = name;
        this.number = number;
    }
    public Pair(String name, String number) throws NumberFormatException {
        this.name = name;
        this.number = Integer.parseInt(number);
    }
    public int compareTo(Object o) {
        if (o instanceof Pair) {
            // int cmp = Double.compare(number, ((Pair) o).number);
            int cmp = number - ((Pair) o).number;
            if (cmp != 0) {// number是第一要比较的,相当于先比较value。如果相同再比较键
                return cmp;
            }
            return name.compareTo(((Pair) o).name);
        }
        throw new ClassCastException("Cannot compare Pair with "
                + o.getClass().getName());
    }
    public String toString() {
        return name + ' ' + number;
    }
}




