1.自然排序:实现Comparable接口
通过重写Comparable接口中的comparaTo(Object obj)的方法对类进行自定义排序。
public class User implements Comparable private String name; private int age; //按照姓名从小到大排列,姓名相同按年龄排序 @Override public int compareTo(Object o) { if(o instanceof User){ User user = (User) o; int compare = this.name.compareTo(user.name); if(compare != 0){ return compare; }else{ return Integer.compare(this.age,user.age); } }else{ throw new RuntimeException("输入类型不同"); } }
2.定制排序:使用Comparator接口
当Comparable接口无法修改时且不满足暂时需求时使用Comparable接口重写Compara()方法进行临时排序。
主要使用在
Arrays.sort(T[] a,Comparator<? super T> c);
Collections.sort(List <T> list,Comparator<? super T> c);
new TreeSet(Comparator<? super E> comparator);
实例为Arrays.sort
@Test public void Test2() { User[] arr11 = new User[3]; arr11[0] = new User("111", 23); arr11[1] = new User("222", 14); arr11[2] = new User("111", 24); System.out.println(Arrays.toString(arr11)); Comparator comparator = (Object o1, Object o2) -> { if (o1 instanceof User && o2 instanceof User) { User g1 = (User) o1; User g2 = (User) o2; if (g1.getName().equals(g2.getName())) { return Integer.compare(g1.getAge(), g2.getAge()); } else return g1.getName().compareTo(g2.getName()); } throw new RuntimeException("cuocuocuo"); }; Arrays.sort(arr11, comparator); System.out.println(Arrays.toString(arr11)); }