JAVA中集合比较排序的使用

简介: JAVA中集合比较排序的使用以List为例,Set,Map类似

虽然目前处理排序问题大都在数据库层面通过Order By的方式处理掉了,但是难免会有一些数据需要在JAVA缓存里去做,比如一些统计的排序,影响数据库查询速度的且不涉及到分页有限的数据排序。下面介绍两种依靠JAVA比较器实现的集合排序的方法。

一、实现Comparable接口

importjava.util.Collections;
importjava.util.LinkedList;
importjava.util.List;
publicclassPersonimplementsComparable<Person> {
privateStringname;
privateintage;
publicPerson(Stringname, intage) {
this.name=name;
this.age=age;
    }
publicStringgetName() {
returnname;
    }
publicintgetAge() {
returnage;
    }
@OverridepublicintcompareTo(Personother) {
// 根据年龄进行比较returnInteger.compare(this.age, other.age);
    }
@OverridepublicStringtoString() {
return"Person{name='"+name+"', age="+age+"}";
    }
publicstaticvoidmain(String[] args) {
List<Person>peoples=newLinkedList<>() {{
add(newPerson("Alice", 25));
add(newPerson("Bob", 30));
add(newPerson("Charlie", 20));
        }};
// 对Person对象列表进行排序Collections.sort(peoples);
// 打印排序结果for (Personperson : peoples) {
System.out.println(person);
        }
    }
}

二、自定义Comparator类,将其传入Collections排序方法中

importjava.util.Collections;
importjava.util.LinkedList;
importjava.util.List;
importjava.util.Comparator;
publicclassPerson2{
privateStringname;
privateintage;
publicPerson2(Stringname, intage) {
this.name=name;
this.age=age;
    }
publicStringgetName() {
returnname;
    }
publicintgetAge() {
returnage;
    }
@OverridepublicStringtoString() {
return"Person{name='"+name+"', age="+age+"}";
    }
publicstaticvoidmain(String[] args) {
List<Person2>peoples=newLinkedList<>() {{
add(newPerson2("Alice", 25));
add(newPerson2("Bob", 30));
add(newPerson2("Charlie", 20));
        }};
// 使用自定义比较器按照年龄进行排序Comparator<Person2>ageComparator=Comparator.comparingInt(Person2::getAge);
// 对Person对象列表进行排序Collections.sort(peoples,ageComparator);
// 打印排序结果for (Person2person : peoples) {
System.out.println(person);
        }
    }
}

三、Map集合的排序

Map的比较排序有两种方式,一种是通过TreeMap的自定义比较器实现,一种是通过将Map转为ArrayList的方式去实现。思路跟上述List的排序类似,可以自行实现

四、排序算法

最终会转化数组,通过Arrays.sort去实现排序,该方法使用了一种基于快速排序(基础类型)和归并排序(归并排序中使用到了二分排序法)的算法(TimSort),JDK17以后使用到的快速排序是Dual Pivot Quicksort,效率更高。

1684999858484.png


目录
相关文章
|
30天前
|
Java
【Java】如果一个集合中类型是String如何使用拉姆达表达式 进行Bigdecimal类型计算?
【Java】如果一个集合中类型是String如何使用拉姆达表达式 进行Bigdecimal类型计算?
25 0
|
1月前
|
算法 Java 数据处理
Java集合框架的优缺点
Java集合框架的优缺点
|
1月前
|
网络协议 算法 Java
|
1月前
|
安全 算法 Java
Java中的线程安全集合
【2月更文挑战第23天】本文将介绍Java中的线程安全集合,包括它们的使用场景、优缺点以及如何在实际项目中应用。通过阅读本文,你将了解到线程安全集合的重要性以及如何在多线程环境下使用它们来提高程序的性能和稳定性。
33 0
|
1月前
|
存储 算法 Java
JAVA的集合框架
JAVA的集合框架
17 0
|
1月前
|
存储 Java 容器
Java中的集合框架
Java中的集合框架
21 0
|
1月前
|
存储 算法 Java
Java中的集合框架:高效管理数据的关键
Java中的集合框架:高效管理数据的关键
16 0
|
1天前
|
存储 Java C++
Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列
Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列
9 0
|
13天前
|
存储 Java 编译器
Java集合丛林:深入了解集合框架的秘密
Java集合丛林:深入了解集合框架的秘密
15 0
Java集合丛林:深入了解集合框架的秘密
|
16天前
|
Java BI
Java 获取周,月,年日期集合(统计图)
Java 获取周,月,年日期集合(统计图)
Java 获取周,月,年日期集合(统计图)