Java常用工具类—集合排序

 更新时间:2019年03月23日 08:56:52   作者:LSmurfs  
这篇文章主要介绍了Java集合排序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、集合排序概述

1、主要内容

  1. 集合中的基本数据类型排序
  2. 集合中的字符串排序
  3. Comparator接口
  4. Comparable接口

回顾:

//数组的排序
int[] arr= {2,3,4,5,2,1};
Arrays.sort(arr);

2、集合排序方法

  1. 使用Collections类的sort(List list)方法
  2. 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接口介绍

  1. 强行对某个对象进行整体排序的比较函数
  2. 可以将Comparator传递给sort方法(如Collections.sort或 Arrays.sort)
  3. 包含方法int compare(T o1, T o2) 比较用来排序的两个参数  –如果o1<o2,返回负整数   –如果o1==o2,返回0  –如果o1>o2,返回正整数
  4. 包含方法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)对宠物猫按年龄降序排序

  1. 调用compare方法大于0,就把前一个数和后一个数交换,也就是把大的数放后面了,即所谓的升序了。如果第二个参数与第一个参数调换顺序,也就是降序了。
  2. 按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概述

  1. Comparable接口位于Java.lang包下面
  2. 此接口强行对实现他的每个类的对象进行整体排序
  3. 这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法
  4. 对于集合,通过调用Collection.sort方法进行排序
  5. 对于数组,通过调用Arrays.sort方法进行排序
  6. int compareTo(T o)方法:该对象小于,等于或大于指定对象,则分别返回负整数,0,或正整数

2、对商品价格进行降序排序案例

(1)操作步骤

  1. 对待排序的类进行接口实现
  2. 重写compareTo方法
  3. 直接调用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的实现类
使用顺序:

  1. 实现要排序的接口
  2. 实现comparator接口
  3. 测试

2、Comparable

①位于java.lang包
②在要比较的类上实现该接口
③调用sort方法时,只需指定集合名即可
使用顺序:

定义要比较的类,并实现comparable接口
测试

以上所述是小编给大家介绍的Java集合排序详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • SpringBoot 利用MultipartFile上传本地图片生成图片链接的实现方法

    SpringBoot 利用MultipartFile上传本地图片生成图片链接的实现方法

    这篇文章主要介绍了SpringBoot 利用MultipartFile上传本地图片生成图片链接的实现方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • java常用的加密解决方案分享

    java常用的加密解决方案分享

    这篇文章全面介绍了Java中加解密技术的应用,包括哈希函数、对称加密、非对称加密、消息认证码和数字签名等,它详细解释了每种技术的工作原理,并提供了相应的Java代码示例,文章还强调了密钥管理的重要性,并提出了在实际应用中遵循的最佳实践
    2025-01-01
  • mybatis plus表的创建时间和修改时间的操作方法

    mybatis plus表的创建时间和修改时间的操作方法

    这篇文章主要介绍了mybatis plus表的创建时间和修改时间的实现方法,本文给大家分享两种方法,每种方法通过实例代码给大家介绍的非常详细,需要的朋友可以参考下
    2021-09-09
  • Java数据结构篇之实现二叉搜索树的核心方法

    Java数据结构篇之实现二叉搜索树的核心方法

    二叉搜索树是一种常用的数据结构,它是一棵二叉树,且每个节点的值都大于其左子树中任何节点的值,而小于其右子树中任何节点的值,这篇文章主要给大家介绍了关于Java数据结构篇之实现二叉搜索树的核心方法,需要的朋友可以参考下
    2023-12-12
  • JavaWeb实现注册用户名检测

    JavaWeb实现注册用户名检测

    这篇文章主要为大家详细介绍了JavaWeb实现注册用户名检测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • Java的Hibernate框架数据库操作中锁的使用和查询类型

    Java的Hibernate框架数据库操作中锁的使用和查询类型

    这篇文章主要介绍了Java的Hibernate框架数据库操作中锁的使用和查询类型,Hibernate是Java的SSH三大web开发框架之一,需要的朋友可以参考下
    2016-01-01
  • 最新版 IDEA 2022.1 正式上线新功能一览

    最新版 IDEA 2022.1 正式上线新功能一览

    4月12日,最新版的IDEA 2022.1正式发布,无论是从UI上,还是功能上,都有了很大的改进,完善,一起来看一下都有那些重要的更新
    2022-04-04
  • Java高并发编程之CAS实现无锁队列代码实例

    Java高并发编程之CAS实现无锁队列代码实例

    这篇文章主要介绍了Java高并发编程之CAS实现无锁队列代码实例,在多线程操作中,我们通常会添加锁来保证线程的安全,那么这样势必会影响程序的性能,那么为了解决这一问题,于是就有了在无锁操作的情况下依然能够保证线程的安全,需要的朋友可以参考下
    2023-12-12
  • java关键字super的骚操作详解

    java关键字super的骚操作详解

    关键字super在Java中用于引用当前类的父类(即超类)的构造方法、访问父类的成员变量和方法,它提供了一种方便的方式来处理继承关系中的父类操作,下面我们就来看看它有哪些骚操作吧
    2023-09-09
  • SpringBoot中LogBack日志配置与多环境实战

    SpringBoot中LogBack日志配置与多环境实战

    在现代软件开发中,日志记录是不可或缺的一部分,Spring Boot 提供了多种日志框架的支持,其中 Logback 是一个非常流行的选择,因为它简单、高效且功能强大,本文将介绍如何在 Spring Boot 项目中配置 Logback,并实现不同环境下的日志配置,需要的朋友可以参考下
    2025-01-01

最新评论