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 }