正文
Java自定义排序:继承Comparable接口,重写compareTo方法(排序规则)
小程序:扫一扫查出行
【扫一扫了解最新限行尾号】
复制小程序
【扫一扫了解最新限行尾号】
复制小程序
代码:
1 import java.util.*;
2
3 /**
4 * 学习自定义排序:继承Comparable接口,重写compareTo方法(排序规则)。
5 * TreeMap容器的Key是自动排序的,Key为自定义类时,必须重写排序规则。
6 * Iterator迭代器遍历Map容器
7 */
8 public class DiySort {
9
10 /**
11 * 测试
12 * @param args
13 */
14 public static void main(String[] args) {
15 Temp t1 = new Temp(55,3.1,"第一个对象");
16 Temp t2 = new Temp(22,3.7,"第二个对象");
17 Temp t3 = new Temp(11,3.3,"第三个对象");
18 Temp t4 = new Temp(22,3.9,"第四个对象");
19 Temp [] ts = {t1,t2,t3,t4};
20 Arrays.sort(ts);
21 System.out.println("看看Arrays帮我排的序:");
22 System.out.println(Arrays.toString(ts));
23
24 //TreeMap容器的Key是自动排序的
25 TreeMap<Temp,String> tm1 = new TreeMap<>();
26 tm1.put(t1,"值1");
27 tm1.put(t2,"值2");
28 tm1.put(t3,"值3");
29 tm1.put(t4,"值4");
30 System.out.println("看看TreeMap里面的样子:");
31
32 //Iterator迭代器遍历容器,hasNext()判断此节点是否为空,next()返回此节点并且指向下一个节点。
33 Set<Map.Entry<Temp,String>> ss = tm1.entrySet();
34 for(Iterator<Map.Entry<Temp,String>> itr = ss.iterator(); itr.hasNext();){
35 Map.Entry<Temp,String> temp = itr.next();
36 System.out.println("Key:"+temp.getKey()+"value"+temp.getValue());
37 }
38 }
39 }
40
41 /**
42 * 某个类作为key值时,需要继承Comparable接口,重写compareTo方法(排序规则)。
43 */
44 class Temp implements Comparable<Temp>{
45 int i;
46 double d;
47 String str;
48
49 /**
50 * 此类的排序规则,
51 * @param o
52 * @return 1为大于传进来的数,0为相等,-1为小于
53 */
54 @Override
55 public int compareTo(Temp o) {
56 if(this.i>o.i){//先看i的值大小
57 return 1;
58 } else if(this.i==o.i){
59 if(this.d>o.d){//i的值相等时,看d的值大小
60 return 1;
61 }else if(this.d==o.d){
62 return 0;
63 }else {
64 return -1;
65 }
66 }else {
67 return -1;
68 }
69 }
70
71 /**
72 * 构造器
73 */
74 public Temp(int i, double d, String str) {
75 this.i = i;
76 this.d = d;
77 this.str = str;
78 }
79
80 @Override
81 public String toString() {
82 return "Temp{" +
83 "i=" + i +
84 ", d=" + d +
85 ", str='" + str + '\'' +
86 '}';
87 }
88 }
运行结果: