从零开始的java开发1-6-1集合排序:对整型和字符串comparator接口comparable接口(代码片段)

karshey karshey     2022-11-30     525

关键词:

文章目录

数组的排序

int[] arr= 1,2,3,4,5,1;
Arrays.sort(arr);

集合排序

使用Collections类的sort()方法;
sort(List<T> list):根据元素的自然顺序指定列表按升序进行排序。

案例:对整型排序

public class IntSort 

	public static void main(String[] args) 
		// 对存储在List中的整型数据进行排序
		List<Integer> list = new ArrayList<Integer>();
		list.add(1);
		list.add(9);
		list.add(0);
		list.add(2);

		System.out.println("排序前:");
		for (int i = 0; i < list.size(); i++) 
			System.out.print(list.get(i) + "  ");
		

		System.out.println();
		Collections.sort(list);
		System.out.println("排序后:");
		for (int i = 0; i < list.size(); i++) 
			System.out.print(list.get(i) + "  ");
		
	



输出:

排序前:
1  9  0  2  
排序后:
0  1  2  9  

案例:对字符串进行排序

根据ASCII码进行排序。

public static void main(String[] args) 
		// 对存储在List中的整型数据进行排序
		List<String> list = new ArrayList<String>();
		list.add("2");
		list.add("1");
		list.add("a");
		list.add("JAVA");
		

		System.out.println("排序前:");
		for (int i = 0; i < list.size(); i++) 
			System.out.print(list.get(i) + "  ");
		

		System.out.println();
		Collections.sort(list);
		System.out.println("排序后:");
		for (int i = 0; i < list.size(); i++) 
			System.out.print(list.get(i) + "  ");
		
	

输出:

排序前:
2  1  a  JAVA  
排序后:
1  2  JAVA  a  

Comparator接口

Java.util包下。

  • 强行对某个对象进行整体排序的比较函数
  • 可以将Comparator传递给sort方法(如Collections.sortArrays.sort
  • int compare(T o1,T o2 ),比较用来排序的两个参数:o1<o2返回负整数;=返回0;o1>o2返回正整数
  • boolean equals(Object obj)指示某个其他对象是否“等于”此Comparator:此方法可以被Object类中的equals方法覆盖,不必重写

案例:对宠物猫分别按名字升序、年龄降序进行排列

核心代码:Collections.sort(list,new NameComparator());

按名字升序

代码:“名字比较器”的类,实现Comparator这个接口

//定义一个“名字比较器”的类,它实现了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;
	


代码:测试类

public static void main(String[] args) 
		// 按名字升序排序
		Cat hua = new Cat("huahua", 5, "英短");
		Cat fan = new Cat("fanfan", 2, "狸花");
		Cat mao = new Cat("maomao", 3, "中华田园猫");

		List<Cat> list = new ArrayList<Cat>();
		list.add(hua);
		list.add(fan);
		list.add(mao);

		// 排序前
		System.out.println("排序前:");
		for (int i = 0; i < list.size(); i++) 
			System.out.println(list.get(i).toString());
		
		System.out.println();

		// 按名字升序排序——排序后
		Collections.sort(list, new NameComparator());
		System.out.println("排序后:");
		for (int i = 0; i < list.size(); i++) 
			System.out.println(list.get(i).toString());
		
		System.out.println();
	

输出:

排序前:
[姓名=huahua, 年龄=5, 品种=英短]
[姓名=fanfan, 年龄=2, 品种=狸花]
[姓名=maomao, 年龄=3, 品种=中华田园猫]

排序后:
[姓名=fanfan, 年龄=2, 品种=狸花]
[姓名=huahua, 年龄=5, 品种=英短]
[姓名=maomao, 年龄=3, 品种=中华田园猫]

按年龄降序
比较类:

//年龄降序比较器
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;
	

测试输出:

按年龄降序排序后:
[姓名=huahua, 年龄=5, 品种=英短]
[姓名=maomao, 年龄=3, 品种=中华田园猫]
[姓名=fanfan, 年龄=2, 品种=狸花]

Comparable接口

Java.lang包下。

  • 此接口强行对实现它的每个类的对象进行整体排序
  • 这种排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法
  • 对于集合,通过调用Collections.sort方法进行排序
  • 对于数组,通过调用Arrays.sort方法进行排序
  • int compareTo(T o)方法:对象小于、等于、大于指定对象,则分别返回负整数、0、或正整数

案例:对商品价格进行降序排列

核心代码:Collections.sort(list);

商品类:

public class Goods implements Comparable<Goods> 
	//属性和方法
	....
	//比较类
	@Override
	public int compareTo(Goods o) 
		double price1 = this.getPrice();
		double price2 = o.getPrice();
		int n = new Double(price2 - price1).intValue();
		return n;
	

测试类:

public class GoodsTest 

	public static void main(String[] args) 
		// TODO Auto-generated method stub
		Goods g1 = new Goods("S01", "电视", 2000);
		Goods g2 = new Goods("S02", "电脑", 6000);
		Goods g3 = new Goods("S03", "手机", 4000);

		List<Goods> list = new ArrayList<Goods>();
		list.add(g1);
		list.add(g2);
		list.add(g3);

		// 排序前
		System.out.println("排序前:");
		for (Goods l : list) 
			System.out.println(l.toString());
		

		// 排序后
		Collections.sort(list);
		// 排序前
		System.out.println("排序前:");
		for (Goods l : list) 
			System.out.println(l.toString());
		
	



输出:

排序前:
[商品编号=S01, 商品名字=电视, 商品价格=2000.0]
[商品编号=S02, 商品名字=电脑, 商品价格=6000.0]
[商品编号=S03, 商品名字=手机, 商品价格=4000.0]
排序前:
[商品编号=S02, 商品名字=电脑, 商品价格=6000.0]
[商品编号=S03, 商品名字=手机, 商品价格=4000.0]
[商品编号=S01, 商品名字=电视, 商品价格=2000.0]

总结

Comparator和Comparable的区别

Comparator

  • 位于java.util包
  • 在要比较的类的外部实现该接口
  • 调用sort方法时,要指定 Comparator的实现类

Comparable

  • 位于java.lang包
  • 在要比较的类内实现该接口
  • 调用sort方法时,只需要指定集合名即可

对于Comparator

  1. 实现要比较的类
  2. 实现Comparator接口
  3. 测试

对于Comparable

  1. 定义要比较的类,并在类内实现Comparable接口
  2. 测试

java开发从零开始!java游戏服务器开发教程

阶段一:筑基Java基础掌握不牢,对于一个开发人员来说无疑是非常致命的。学习任何一个技术知识无疑不是从基础开始;在面试的时候,面试官无疑不是从基础开始拷问。内容包括:Java概述、Java基本语法、Ja... 查看详情

[从零开始学java]java简介

一.什么是程序   程序是为了让计算机执行某些操作或解决某个问题而编写的一系列有序指令的集合。二.应用最广泛的两种JAVA技术:JavaSE和JavaEE 1.JavaSE    JavaSE全称是JavaPlatformStandartEdition(Java平台标准版),是... 查看详情

从零开始的java开发1-5-4arraylisthashsethashmap概述与案例(代码片段)

文章目录集合框架的体系结构List概述ArrayList案例:在List中操作String案例:公告管理——在ArrayList中对自定义对象的操作Set概述案例:在Set中操作String案例:宠物猫信息管理——在HashSet中对自定义对象的操作Map概... 查看详情

读java实战(第二版)笔记19_尾声

...nbsp;元组字面量1.7.2. 通过存取器(accessor)_1、_2(从1开始的一个序列)访问元组中的元素1.8.& 查看详情

java运算疑惑整型和浮点型混合运算

...是目前比较好的解决方法本回答被提问者采纳 参考技术B整型和浮点型相加会JVM会自动将整形转为浮点型 查看详情

java开发从零开始!springboot集成kafka配置

蚂蚁金服一面:下午杭州的电话,问有没有空,果断有空,虽然感觉略显紧张,有点懵逼。面试的题目:HashMap和Hashtable的区别实现一个保证迭代顺序的HashMap说一说排序算法,稳定性,复杂度说一说... 查看详情

python从零开始——集合set

 一:Python集合知识概览 二:Python的特性、格式、以及各序列结构对比 三:Python集合set的创建 四:集合常用操作之——添加元素 五:集合常见操作之——删除元素 六:集合常见操作之—&mda... 查看详情

从零学java笔录-第0篇

从零学java笔录-第0篇写在前面的话:一直想把自己学习java的过程分享出去,以前只是太懒,最近工作又太忙。好不容易国庆了,整理了自己从零开始学java的笔记。以后无论在忙努力坚持每天至少发一到两篇。希望自己可以坚持... 查看详情

从零开始自学java泛型的设计难不难?

...识点,在Java集合类框架中泛型被广泛应用。本文我们将从零开始来看一下Java泛型的设计,将会涉及到通配符处理,以及让人苦恼的类型擦除。 泛型基础泛型类我们首先定义一个简单的Box类:publicclassBox{   privateStr... 查看详情

从零开始的java开发1-2-4java方法

文章目录方法方法分类数组作为方法参数方法重载基本数据类型的传值数组的传值(引用数据类型)可变参数列表可变参数列表作为方法参数的重载文档注释方法的调试细节与总结方法所谓方法,就是用来解决一类问... 查看详情

java从零开始学习——java数组

数组一、概述相同类型数据的有序集合每个数组元素可以通过下标来访问它们(0~length-1)数组的长度是确定的,一旦被创建,它的大小就不可改变数组属于引用类型,也可以看成对象,每个数组元素相当于改对象的成员变量数组本... 查看详情

从零开始做第三方支付开发-----初步了解概念

这是第三方支付开发的第一篇.目前很多公司在做海外支付,但是不知道怎么开始.本人公司就是做海外产品,涉及到paypal和stripe支付,有比较多的经验,希望可以帮助需要的朋友.我是做Java开发,所以这一系列的所有例子都用Java编写,其... 查看详情

python下列哪些类型的数据可以放入到集合中列表字典集合整型浮点型?

可哈希的类型,也就是不可变数据类型的都行参考技术A整型和浮点型 查看详情

从零开始创建自己的区块链应用(java版)

阅读对象本文阅读对象,主要是希望和即将从事区块链开发的项目架构师,开发工程师,项目设计或产品设计师。要求阅读者具备一定的“区块链”基础知识、概念和以及相关的技术知识。如果你只需要对区块链应用做一个更深... 查看详情

从零开始创建自己的区块链应用(java版)

阅读对象本文阅读对象,主要是希望和即将从事区块链开发的项目架构师,开发工程师,项目设计或产品设计师。要求阅读者具备一定的“区块链”基础知识、概念和以及相关的技术知识。如果你只需要对区块链应用做一个更深... 查看详情

2.2go语言中的布尔型和整型(代码片段)

...种:基本类型:数值、字符串、布尔型、常量等集合类型:数组和结构体引用类型:指针& 查看详情

java开发从零开始!kafka版本历史

ActiveMQ我们先看ActiveMQ。其实一般早些的项目需要引入消息中间件,都是使用的这个MQ,但是现在用的确实不多了,说白了就是有些过时了。我们去它的官网看一看,你会发现官网已经不活跃了,好久才会更新... 查看详情

java开发从零开始!kafka版本历史

ActiveMQ我们先看ActiveMQ。其实一般早些的项目需要引入消息中间件,都是使用的这个MQ,但是现在用的确实不多了,说白了就是有些过时了。我们去它的官网看一看,你会发现官网已经不活跃了,好久才会更新... 查看详情