Java常用工具类—集合排序
作者:LSmurfs 发布时间:2022-07-08 08:05:39
一、集合排序概述
1、主要内容
集合中的基本数据类型排序
集合中的字符串排序
Comparator接口
Comparable接口
回顾:
//数组的排序
int[] arr= {2,3,4,5,2,1};
Arrays.sort(arr);
2、集合排序方法
使用Collections类的sort(List list)方法
sort(List list)是根据元素的自然顺序对指定列表按升序进行排序。
二、对基本数据类型和字符串类型进行排序
1、对基本数据类型排序
List中只能存放对象,要想存放基本数据类型的话,泛型中只能写其对应的包装类。
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class IntSort {
public static void main(String[] args) {
//对存储在List中的整形数据进行排序
List<Integer> list = new ArrayList<Integer>();
list.add(5);
list.add(9);
list.add(3);
list.add(1);
System.out.println("排序前:");
for (int n: list) {
System.out.print(n + " ");
}
System.out.println();
//对List中的数据进行排序
Collections.sort(list);
System.out.println("排序后:");
for (int n: list) {
System.out.print(n + " ");
}
}
}
2、对字符串排序
集合中字符串的排序后其实是按字符顺序,ASCII值顺序进行排序的
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class StringSort {
public static void main(String[] args) {
//对存放在List中的字符串进行排序。
List<String> list = new ArrayList<String>();
list.add("orange");
list.add("blue");
list.add("yellow");
list.add("gray");
System.out.println("排序前: ");
for (String str: list) {
System.out.print(str + " ");
}
System.out.println();
//对List中的数据进行排序
Collections.sort(list);
System.out.println("排序后: ");
for (String str: list) {
System.out.print(str + " ");
}
//排序后其实是按字母顺序
}
}
三、Comparator接口
1、问题场景:
自定义的类如何排序?
2、解决方法:
使用Comparable或Comparator接口
3、Comparator接口介绍
强行对某个对象进行整体排序的比较函数
可以将Comparator传递给sort方法(如Collections.sort或 Arrays.sort)
包含方法int compare(T o1, T o2) 比较用来排序的两个参数 –如果o1<o2,返回负整数 –如果o1==o2,返回0 –如果o1>o2,返回正整数
包含方法boolean equals(Object obj)指示某个其他对象是否“等于”此Comparator。此方法可以被Object类中的equals方法覆盖,不必重写,也就是说,我们在Comparator接口中只需要重写compare这个方法。
4、对宠物猫进行排序
对自定义的类按照一定的规则进行排序:
(1)对宠物猫按名字进行排序
String类型具有compareTo()方法
例:
int n = name1.conpareTo(name2);
如果name1<name2时,那么n是负整数,相等则为0,否则为正整数。
name1与name2位置调换下,则会实现倒序的排序。
import java.util.Comparator;
//按名字进行升序排序的比较器
public class NameComparator implements Comparator<Cat> {
@Override
public int compare(Cat o1, Cat o2) {
//按名字升序排序
String name1 = o1.getName();
String name2 = o2.getName();
int n = name1.compareTo(name2);
return n;
}
}
语法格式:
Collections.sort(catList, new NameComparator());
(2)对宠物猫按年龄降序排序
调用compare方法大于0,就把前一个数和后一个数交换,也就是把大的数放后面了,即所谓的升序了。如果第二个参数与第一个参数调换顺序,也就是降序了。
按int类型比较,直接返回减法后的差值。
import java.util.Comparator;
//按年龄进行降序排序的比较器
public class AgeComparator implements Comparator<Cat> {
@Override
public int compare(Cat o1, Cat o2) {
int age1 = o1.getMonth();
int age2 = o2.getMonth();
return age2 - age1;
}
}
语法格式:
Collections.sort(catList, new AgeComparator());
四、Comparable接口
1、Comparable概述
Comparable接口位于Java.lang包下面
此接口强行对实现他的每个类的对象进行整体排序
这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法
对于集合,通过调用Collection.sort方法进行排序
对于数组,通过调用Arrays.sort方法进行排序
int compareTo(T o)方法:该对象小于,等于或大于指定对象,则分别返回负整数,0,或正整数
2、对商品价格进行降序排序案例
(1)操作步骤
对待排序的类进行接口实现
重写compareTo方法
直接调用Collections.sort()方法。
(2)代码实现
①商品类的定义
public class Goods implements Comparable<Goods> { //实现Comparable接口,利用泛型限定比较的类型
private String id; //商品编号
private String name; //商品名称
private double price; //商品价格
//构造方法
public Goods() {
}
public Goods(String id, String name, double price) {
this.setId(id);
this.setName(name);
this.setPrice(price);
}
//getter和setter方法
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "商品编号:" + id + ",商品名称:" + name + ",商品价格:" + price;
}
@Override
public int compareTo(Goods o) { //重写compareTo方法。
//取出商品价格
double price1 = this.getPrice();
double price2 = o.getPrice();
int n = new Double(price2 - price1).intValue(); //double类型的差值转为int
return n;
}
②排序步骤
Collections.sort(goodsList);
五、集合排序总结
Comparator和Comparable接口的区别
1、Comparator:
①位于java.util包
②在要比较的类的外部实现该接口
③调用sort方法时,要指定Comparator的实现类
使用顺序:
实现要排序的接口
实现comparator接口
测试
2、Comparable
①位于java.lang包
②在要比较的类上实现该接口
③调用sort方法时,只需指定集合名即可
使用顺序:
定义要比较的类,并实现comparable接口
测试
以上所述是小编给大家介绍的Java集合排序详解整合网站的支持!
来源:https://blog.csdn.net/zhty88668/article/details/88655070


猜你喜欢
- 在本文中,我们将通过用C#重构一个非常简单的代码示例来解释依赖注入和IoC容器。 简介:依赖注入和IoC乍一看可能相当复杂,但它们
- 一、Unity Shader基础1、创建和使用Shader在Unity中Shader一般由两种用途:指定给材质,用于物理渲染;指定给脚本,用
- 年纪大了,以前做过的东西过阵子还是会忘,今天使用jenkins持续集成工具时用到了eclipse上传新maven工程至svn,上传完毕后改了
- 介绍技术之前有用eureka 现在用nacos工作流和gateway接口数据流向数据表新建项目新建cloud-删除src-新建modleEu
- 内置的连接池目前spring Boot中默认支持的连接池有dbcp,dbcp2, tomcat, hikari三种连接池。 数据库连接可以使
- 前言Spring 的 JDBC Templet 是 Spring 对 JDBC 使用的一个基本的封装。他主要是帮助程序员实现了数据库连接的管
- 前言关于android的volley封装之前写过一篇文章,见链接(https://www.jb51.net/article/155875.h
- 一.前言现在的app基本上都需要用到短信功能,注册时或者有消息通知时需要给用户发送一条短信,但是对于个人开发者来说,去买第三方的短信服务实在
- 在后台工程师开发完新代码交给QA进行测试时,软件测试人员一般都会要求后台开发对单元测试的覆盖率达到一定的标准;例如我们的标准是分支覆盖率达到
- 前言在项目开发过程中,时常会碰到这种情况:1.同一个Project的同一个API,有几个不同的接口,比如内部测试用的Server,和当前版本
- 这篇文章主要介绍了SpringBoot Jpa分页查询配置方式解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价
- 本文首先将会回顾Spring 5之前的SpringMVC异常处理机制,然后主要讲解Spring Boot 2 Webflux的全局异常处理机
- java.util.concurrent.ScheduledThreadPoolExecutor 是JDK1 .6之后自带的包,功能强大,能
- 本文实例为大家分享了Android Glide图片加载的具体代码,供大家参考,具体内容如下1.普通用法Glide.with(context)
- 在安卓开发导入项目过程中,出现错误再所难免。最近导入项目就遇到如下错误,具体如下图所示。出现如上错误,最初设想先看下项目能不能运行。经尝试可
- 微信分享接口的java开发的一些小步骤,具体内容如下1.配置接口信息进行验证代码如下: /** * 访问没认证的地
- 1. openFeign实现基于spring-boot-starter-parent 2.6.8,spring-cloud-dependen
- Java 中的内部类这是一个 Java 内部类的简单实现:public class OutterJava { pr
- RestTemplate未设置超时时间,导致RabbitMQ队列大量堆积,消费者假死,不进行消费,类似线程堵塞。排查:从日志排查问题,在从进
- 目录方案一,更改启动项方案二,禁用检查应用程序的CAS发布者策略方案一,更改启动项出问题应用的启动项是使用的默认设置,查看App.g.cs文