Java自定义类排序

news/2024/5/19 23:51:36 标签: java, 快速排序

之前用C++做题,结构体排序一般都是重载sort,最近用java遇到排序的,返回值也总是记混,在此记录一下。
下面用的是Collections类中的sort方法对list排序,并重写了Comparator。

java">import java.util.Comparator;
import java.util.Collections;
import java.util.LinkedList;
import java.util.List;

public class Main {
	public static void main(String[] args) {
		List<City> list = new LinkedList<City>();
		list.add(new City(0,2));
		list.add(new City(1,3));
		list.add(new City(2,3));
		list.add(new City(3,2));
		Collections.sort(list, new Comparator<City>() {
			public int compare(City a, City b) {
				if(a.num == b.num) {	//num相等,编号大的在前
					return b.id - a.id;
				}else {		//num不相等,num小的在前
					return a.num - b.num;
				}
			}
		});
		System.out.println(list);
	}
}

class City {
	int id;
	int num;
	
	public City(int id, int num) {
		super();
		this.id = id;
		this.num = num;
	}

	@Override
	public String toString() {
		return "City [id=" + id + ", num=" + num + "]";
	}
	
}

结果:
[City [id=3, num=2], City [id=0, num=2], City [id=2, num=3], City [id=1, num=3]]


除此之外,还可以对list中的对象实现Comparable接口。


http://www.niftyadmin.cn/n/1690674.html

相关文章

markdown公式语法

#Cmd Markdown 公式指导手册 标签&#xff1a; Tutorial 点击跳转至 Cmd Markdown 简明语法手册 &#xff0c;立刻开始 Cmd Markdown 编辑阅读器的记录和写作之旅&#xff01; 本文为 MathJax 在 Cmd Markdown 环境下的语法指引。 Cmd Markdown 编辑阅读器支持 LaTeX\LaTeXLAT…

【题解】 UVA1707 【Surveillance】

看到是环&#xff0c;于是我们非常套路地把它拉成链。 接着就要枚举一个起点iii&#xff0c;找到至少覆盖到ilen−1ilen-1ilen−1这个位置需要使用的最少线段数。 由于每个点都要计算&#xff0c;所以可以考虑预处理倍增&#xff0c;计算pi,jp_{i,j}pi,j​表示从iii开始&…

【题解】 CF1359E 【Modular Stability】

我们先拉出序列中最小的那个数aaa&#xff0c;假设现在有一个大于aaa的模数bbb&#xff0c;那么思考一下它们的顺序对答案的影响。 对于任意正整数xxx&#xff0c;我们要满足x%a%bx%b%ax\%a\%b x\%b\%ax%a%bx%b%a&#xff0c;又因为b>ab>ab>a&#xff0c;所以x%a%bx%…

997. 找到小镇的法官

法官是入度为N-1&#xff0c;出度为0的点 一开始用了一个num来统计法官的数目&#xff0c;但后来想了一下没有必要&#xff0c;既然有一个法官的入度为N-1了&#xff0c;说明其他的人都信任他&#xff0c;不存在其他人的出度为0 public int findJudge(int N, int[][] trust) …

1161. 最大层内元素和(深搜 层次遍历)

1161. 最大层内元素和 dfs深搜&#xff0c;能比较方便的统计层数。 /*** Definition for a binary tree node.* public class TreeNode {* int val;* TreeNode left;* TreeNode right;* TreeNode(int x) { val x; }* }*/ class Solution {private int[] val…

【题解】 CF1359D 【Yet Another Yet Another Task】

扫描线大佬真的强…… 我来说说我的奇怪做法。 根据题意&#xff0c;只要先手选定一个区间之后&#xff0c;拿掉的一定是最大值&#xff0c;那么我们可以考虑枚举这个被拿掉的最大值。 于是考虑每个数作为最大值能影响的范围&#xff0c;显然可以用单调栈求出左右第一个比它…

【题解】 P6834 【[Cnoi2020]梦原】

分析 首先我们可以发现&#xff0c;题目中所说的“最优策略”&#xff0c;实际上就是每次不停地选尽量大的连通块&#xff0c;直到连通块中有一个节点上地果子被取完。此时这个节点相当于从树上被删去了&#xff0c;并且将它所在的连通块分割成了若干个小连通块。所以一个连通…

841. 钥匙和房间

841. 钥匙和房间 分类是图&#xff0c;主要还是搜索吧&#xff0c;用的DFS class Solution {boolean[] vis;public boolean canVisitAllRooms(List<List<Integer>> rooms) {vis new boolean[rooms.size()];vis[0] true;return dfs(0, rooms);}public boolean d…