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; } }