IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 算法与数据结构-排序函数 -> 正文阅读

[数据结构与算法]算法与数据结构-排序函数

对于各种基本数据类型的一维数组的排序,我们通常可以使用Java中自带的sort函数对其进行排序。

public static void main(String[] args) {
	char[] a = {'a','v','d','o'};
	Arrays.sort(a);
    System.out.println(Arrays.toString(a));
}

然而对于自定义数据类型的排序,我们通常要继承Comparable接口,或者Comparator接口,来实现排序。

Comparable接口

Comparable 是排序接口。若一个类实现了Comparable接口,就意味着“该类支持排序”。接口中通过x.compareTo(y)来比较x和y的大小。若返回负数,意味着x比y小;返回零,意味着x等于y;返回正数,意味着x大于y。

继承Comparable接口的类,是需要覆写compareTo函数的。

public class test {
    public static void main(String[] args) {
        Job job1 = new Job(1, 1);
        Job job2 = new Job(2, 1);
        Job[] job = {job1, job2};
        Arrays.sort(job);
        System.out.println(Arrays.toString(job));
    }
}

class Job implements Comparable<Job> {
	int s;
	int t;

	public Job(int s, int t) {
		this.s = s;
		this.t = t;
	}

	@Override
	public int compareTo(Job other) {
		int x = this.t - other.t;
		if (x == 0) {
			return this.s - other.s;
		}else {
			return x;
		}
	}
}

对于上面的程序,如果我们需要对一个Job类型数组进行排序,就可以使用函数Arrays.sort(Object[] object)实现。

注意:

  • Comparable接口是实现对自定义类型数组的排序。

Comparator接口

Comparator 是比较器接口。我们可以通过“实现Comparator类来新建一个比较器”,然后通过该比较器对类进行排序。若返回负数,意味着x比y小;返回零,意味着x等于y;返回正数,意味着x大于y。

继承Comparator接口是需要实现compare函数的。

private static class edge {
	public int a;// 起点
	public int b;// 终点
	public int value;// 权值

	public edge(int a, int b, int value) {
		this.a = a;
		this.b = b;
		this.value = value;
	}
}

private static class MyComparator implements Comparator<edge> {
	public int compare(edge o1, edge o2) {
		if (o1.value > o2.value)
			return 1;
		else if (o1.value < o2.value)
			return -1;
		return 0;
	}
}

对于上面的程序,如果我们需要对一个list集合进行排序,我们通常可以使用函数Collections.sort(List list, new MyComparator());

当然对于上面的程序,我们也可以改成用一个匿名内部类的形式来表达。

// 该匿名内部类可以写在一个函数内,直接替代MyComparator类和排序函数
Collections.sort(list, new Comparator<edge>() {
	public int compare(edge o1, edge o2) {
		return o1.value - o2.value;
	}
});

注意:

  • Comparator接口是对自定义类型的集合进行排序

  • Comparator接口的实现是在类的外部(意思就是在自定义类的外部,再创建一个类。除非使用匿名内部类)。

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2021-07-24 11:44:57  更:2021-07-24 11:45:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/5 14:57:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码