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