当前位置:   article > 正文

Java 集合之给ArrayList排序_java arraylist排序

java arraylist排序

Java 集合之给ArrayList排序

ArrayList的排序可以借助Collections工具类的sort(List list)以及重载的sort(List list, Comparator<? super T> c)方法;其中要想使用sort(List lis)方法进行排序集合元素必须实现comparable接口中的compareTo方法;使用重载的sort(List list, Comparator<? super T> c)方法则要传入一个自定义构造器,可以使用匿名内部类的方式传入构造器;
 

  • 1、如果是集合元素类型是8大基本类型的包装类(如Interge、Character等)或者是String类源码中这些类已经实现了Comparable接口,下面拿Integer类举例:
  1.   List<Integer> list0 = new ArrayList<>();
  2. Random random = new Random();
  3. for(int i = 0; i<10;i++){
  4. list0.add(random.nextInt(100));
  5. }
  6. list0.forEach(System.out::println);
  7. //排序前 [27,7166553847506670]
  8. //直接使用默认自然排序(即从小到大的顺序)
  9. Collections.sort(list0);
  10. System.out.println("自然排序后>>>>>>>>>");
  11. list0.forEach(System.out::println);
  12. //自然排序后 [0,6,27,53,65,66,70,71,75,84]
  13. //我们也可以使用同名重载方法传一个构造器进行临时改变排序规则(按从大到小排序)
  14. Collections.sort(list0, new Comparator<Integer>() {
  15. @Override
  16. public int compare(Integer o1, Integer o2) {
  17. return o2 < o1 ? -1 : ((02 == 01) ? 0 : 1);
  18. }
  19. });
  20. list0.forEach(System.out::println);
  21. // [84,75,71,70,66,65,53,27,6,0]

 

  • 对于对象的排序
           要想使用sort(List list)方法给集合排序集合元素必须实现comparable接口中的compareTo方法,所以要想实现对象自定义排序就要在compareTo方法里面做文章:
  1. int compareTo(T t);
  2. 该方法用于使当前对象与给定对象进行比较。
  3. 当返回值>0时:当前对象比参数对象大
  4. 当返回值<0时:当前对象比参数对象小
  5. 当返回值=0时:当前对象等于参数对象

 

例子:
Person类:

  1. @Data
  2. public class Person implements Comparable<Person>{
  3. public Person(String name, Integer age) {
  4. this.name = name;
  5. this.age = age;
  6. }
  7. private String name;
  8. private Integer age;
  9. @Override
  10. public int compareTo(Person o) {
  11.    // 按照年龄从小到大排序
  12. return this.getAge().compareTo(o.getAge());
  13. }
  14. }

 测试代码:

  1. Person p1 = new Person("小王",22);
  2. Person p2 = new Person("小m",20);
  3. Person p3 = new Person("小t",30);
  4. Person p4 = new Person("小q",19);
  5. Person p5 = new Person("小u",20);
  6. Person p6 = new Person("小L",36);
  7. List<Person> list = new ArrayList<>();
  8. list.add(p1);
  9. list.add(p2);
  10. list.add(p3);
  11. list.add(p4);
  12. list.add(p5);
  13. list.add(p6);
  14. System.out.println("未排序之前>>>:");
  15. list.forEach(System.out::println);
  16. Collections.sort(list);
  17. System.out.println("自定义排序之后>>>:");
  18. list.forEach(System.out::println);

 输出结果:

  1. 未排序之前>>>:
  2. Person(name=小王, age=22)
  3. Person(name=小m, age=20)
  4. Person(name=小t, age=30)
  5. Person(name=小q, age=19)
  6. Person(name=小u, age=20)
  7. Person(name=小L, age=36)
  8. 自定义排序之后>>>:
  9. Person(name=小q, age=19)
  10. Person(name=小m, age=20)
  11. Person(name=小u, age=20)
  12. Person(name=小王, age=22)
  13. Person(name=小t, age=30)
  14. Person(name=小L, age=36)

 我们会发现使用sort(List list)方法侵入性比较高,所以不建议使用这个方法,我们可以使用它的重载的sort(List list, Comparator<? super T> c)方法,以匿名内部类的方式传入构造器来完成排序,上面的例子使用此方法演示如下:
 
 Person类:
 

  1. @Data
  2. public class Person {
  3. public Person(String name, Integer age) {
  4. this.name = name;
  5. this.age = age;
  6. }
  7. private String name;
  8. private Integer age;
  9. }

 

测试代码:

  1. Person p1 = new Person("小王",22);
  2. Person p2 = new Person("小m",20);
  3. Person p3 = new Person("小t",30);
  4. Person p4 = new Person("小q",19);
  5. Person p5 = new Person("小u",20);
  6. Person p6 = new Person("小L",36);
  7. List<Person> list = new ArrayList<>();
  8. list.add(p1);
  9. list.add(p2);
  10. list.add(p3);
  11. list.add(p4);
  12. list.add(p5);
  13. list.add(p6);
  14. System.out.println("未排序之前>>>:");
  15. list.forEach(System.out::println);
  16.      //自定义排序,这里我按招年龄从小到大排序
  17. Collections.sort(list, new Comparator<Person>() {
  18. @Override
  19. public int compare(Person o1, Person o2) {
  20. return o1.getAge().compareTo(o2.getAge());
  21. }
  22. });
  23. System.out.println("自定义排序之后>>>:");
  24. list.forEach(System.out::println);

结果和上一种方法是一样的;

仅供参考!!!感谢阅读!!!欢迎指正!!!!

文章转载:

Java 集合之给ArrayList排序

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/从前慢现在也慢/article/detail/715648
推荐阅读
相关标签
  

闽ICP备14008679号