首页 > 编程语言 >Java工具类之 collections

Java工具类之 collections

时间:2023-03-09 20:58:51浏览次数:41  
标签:sort Node Java int age collections 工具 方法 public

Java工具类之 collections

sort()自然排序:

作用:

把集合中的元素按照规则升序或者降序,再或者什么也不干。

注意点:

当使用sort方法时,该集合元素必须是Comparable的子类型,也就是集合中的元素必须实现comparable接口中的comparaTo方法。否则不能使用该方法。

public int compareTo(T o);
必须实现这个抽象方法,才能使用sort方法。但是由于我们一些基本的常用类如String,基本数据类型的包装类等,已经实现了该方法,所以我们不需要自己重写该方法了。自定义类型使用sort方法就必须实现comparaTo方法。

sort()自定义排序:

自定义类型,如学生类,有属性:年龄,姓名等。创建多个学生类对象,放入List集合中。自定义使用sort方法时就必须重写comparaTo方法。

@Override
public int compareTo(Student2 o) {
return this.age-o.age;
}
重写之后的comparaTo方法。

重载之后的sort():

sort()方法还有第二种类型(collection,new Comparator)

Comparator是一个接口,实际上是new了Comparator的实现类,但是要实现里面的抽象方法。

使用案例:

创建 Node 结点,其中包含 a, b 两个成员变量,根据 a 来排序

实现代码如下:

public class Test {

	public static void main(String[] args) {
		ArrayList<Node> arrayList = new ArrayList<>();
		arrayList.add(new Node(100, 9));
		arrayList.add(new Node(0, 0));
		arrayList.add(new Node(9, 100));
		Collections.sort(arrayList);
		System.out.println(arrayList);
	}
}

class Node implements Comparable<Node> {
	int a;
	int b;

	public Node(int a, int b) {
		super();
		this.a = a;
		this.b = b;
	}

	@Override
	public String toString() {
		return "Node [a=" + a + ", b=" + b + "]";
	}

	@Override
	public int compareTo(Node o) {
		return this.a - o.a;// 从小到大
//		return o.a - this.a;// 从大到小        
	}
}

image-20230309204027556

注意点:

1.按照某种规则排序,是重写comparaTo方法时,用什么属性去比较,这个比较的属性就是比较规则排序。

2.实现升序或者降序规则:this(当前调用方法的对象) o(参数传入)
所有比较最底层的逻辑都是发生两两比较逻辑,返回比较结果
正数 this.age > o.age
负数 this.age < o.age
0 this.age==o.age

标签:sort,Node,Java,int,age,collections,工具,方法,public
From: https://www.cnblogs.com/ChuenSan/p/17201348.html

相关文章

  • 还不知道如何在java中终止一个线程?快来,一文给你揭秘
    简介工作中我们经常会用到线程,一般情况下我们让线程执行就完事了,那么你们有没有想过如何去终止一个正在运行的线程呢?今天带大家一起来看看。Thread.stop被禁用之谜问道......
  • maven 遇到Cannot resolve javax.servlet:servlet-api:3.1
    报错Cannotresolvejavax.servlet:servlet-api:3.1原因<dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>......
  • Java注释规范(配合EasyYapi使用)
    类注释示例/***分类名称*分类备注/描述*@module归属项目*@authorhjy*@date2023/3/9下午2:25*/@RestController@RequestMapping("/barm")public......
  • java常见处理数据结构的方式
    1.根据父id,将列表整理为树状结构if(CollUtil.isNotEmpty(sysMenuList)){//使用java8转为树状图结构Map<Long,List<SysMenu>>long......
  • 临时修改java_home
    本机日常使用的jdk17,但是偶尔需要在cmd下使用jdk8,比如我需要使用seata1.5.2setJAVA_HOME=C:\ProgramFiles\Java\jdk1.8.0_301setPATH=%JAVA_HOME%\bin;再执行seat......
  • Java运算符详解
    Java运算符详解算术运算符+,-*,/,%,++,--除法时注意作用范围多个操作数,有一个为long、double······就是long,否则都会转为int,byte和short进行运算也是int++、-......
  • Java变量详解
    Java变量详解类变量static修饰符修饰的变量 作用域为全局实例变量在类中而不在方法中定义的变量或者说属性作用域为类中,方法中使用必须实例化出一个对象通过对象去调......
  • Java数据类型详解
    Java数据类型详解基本数据类型(8种)整数类型byte1个字节-128-127short2个字节负的3万多到正的三万多-32768-32767int4个字节负的20多亿到正的20多亿......
  • AppUploader教程:如何使用该工具制作Apple证书​
    AppUploader教程:如何使用该工具制作Apple证书​AppUploader下载安装操作​AppUploader是一款方便快捷的开发者工具,提供了多项实用的功能。本文将介绍AppUploader的下载和安......
  • Java基础复习
    1、什么是JVM?JVM是Java虚拟机,Java编译器首先将Java代码编译为字节码,然后字节码转换为本地机器码(计算机可以直接执行的指令集)。2、什么是JRE?JRE(Java运行时环境)是一个软......