1 package day2_15;
2
3 import org.junit.Test;
4
5 import java.util.Arrays;
6 import java.util.Comparator;
7
8 /**
9 * 一:说明:Java中的对象,正常情况下,只能进行比较:== 或 !=,不能使用 > 或 <的
10 * 但是在开发场景中,我们需要对多个对象进行排序,也就是需要比较对象的大小。
11 * 如何实现?使用两个接口中的任何一个 Comparable 或 Comparator
12 *
13 * 二:Comparable接口的使用举例 ---->自然排序
14 * 1.像String,包装类,File,java.util.Date类等实现了Comparable接口,重写了compareTo(Object obj),
15 * 给出了比较两个对象大小的方式
16 * 2.像String,包装类重写了compareTo(obj)以后,进行了从小到大的排序
17 * 3.重写compareTo()的规则:
18 * 如果当前对象this 大于 形参对象obj,则返回正整数
19 * 如果当前对象this 小于 形参对象obj,则返回负整数
20 * 如果当前对象this 等于 形参对象obj,则返回零
21 * 4.对于自定义类来说,如果需要排序,我们可以让自定义类实现Comparable接口,重写compareTo(obj)方法,
22 * 在方法中指明如何排序
23 *
24 *
25 * @Author Tianhao
26 * @create 2021-02-15-13:56
27 */
28 public class CompareTest {
29
30 @Test
31 public void test1() {
32 String[] arr = {"AA", "MM", "GG", "KK", "DD", "JJ"};
33 Arrays.sort(arr);
34 System.out.println(Arrays.toString(arr));//[AA, DD, GG, JJ, KK, MM]
35 }
36
37
38 @Test
39 public void test2() {
40 Goods[] arr = new Goods[4];
41 arr[0] = new Goods("huaweiMouse",43);
42 arr[1] = new Goods("lenovoMouse",34);
43 arr[2] = new Goods("dellMouse",43);
44 arr[3] = new Goods("xiaomiMouse",12);
45
46
47 Arrays.sort(arr);
48 System.out.println(Arrays.toString(arr));
49 }
50
51
52
53 /*
54 三:Comparator接口的使用举例 ---->定制排序
55 1.背景
56 当元素的类型没有实现java.lang.Comparable接口而又不方便修改代码,
57 或者实现了java.lang.Comparable接口的排序规则,但不适合当前的操作,
58 那么可以考虑使用Comparator的对象来排序
59 2.重写 int compare(T o1, T o2),比较o1和o2的大小:
60 方法返回正整数,则表示o1大于o2
61 方法返回负整数,则表示o1小于o2
62 方法返回零,则表示o1等于o2
63
64 3.Comparable 和 Comparator的使用对比
65 Comparable接口一旦被某类实现,那么这个实现类在任何位置都可以比较大小
66 Comparator接口属于临时性的比较。(通常使用匿名实现类即可)
67
68 */
69
70
71 @Test
72 public void test3() {
73 String[] arr = {"AA", "MM", "GG", "KK", "DD", "JJ"};
74 Arrays.sort(arr,new Comparator<String>(){
75
76 @Override
77 public int compare(String o1, String o2) {
78 //按照字符串对象从大到小排序
79 return -o1.compareTo(o2);
80 }
81 });
82 System.out.println(Arrays.toString(arr));
83
84 }
85
86 @Test
87 public void test4() {
88 Goods[] arr = new Goods[6];
89 arr[0] = new Goods("huaweiMouse",43);
90 arr[1] = new Goods("iphoneMouse",55);
91 arr[2] = new Goods("lenovoMouse",34);
92 arr[3] = new Goods("dellMouse",43);
93 arr[4] = new Goods("xiaomiMouse",12);
94 arr[5] = new Goods("iphoneMouse",10);
95
96 Arrays.sort(arr, new Comparator<Goods>() {
97 @Override
98 public int compare(Goods o1, Goods o2) {
99 //指明商品比较大小的方式:商品名称从低到高排序,如果名称相同,再按照价格从高到低排序
100 //方式一:
101 // if ((o1.getName().compareTo(o2.getName()))< 0) {
102 // return -1;
103 // }else if ((o1.getName().compareTo(o2.getName())) > 0) {
104 // return 1;
105 // }else{
106 // if (o1.getPrice() < o2.getPrice()) {
107 // return 1;
108 // } else if (o1.getPrice() > o2.getPrice()) {
109 // return -1;
110 // } else {
111 // return 0;
112 // }
113 // }
114
115 //方式二:
116 if (o1.getName().equals(o2.getName())) {
117 return -Double.compare(o1.getPrice(), o2.getPrice());
118 } else {
119 return o1.getName().compareTo(o2.getName());
120 }
121
122 }
123 });
124
125 System.out.println(Arrays.toString(arr));
126 }
127
128
129 }