Java中的sort
Java中对集合排序有两种方式
Comparable和Comparator
public static <T> void sort(List<T> list); 将集合中的数据按照默认规则进行排序 (我们在自己的类里面实现Comparabl接口方法compareTo)
public static <T> void sort(List<T> list, Comparator<? super T>); 将集合中的数据按照指定规则进行排序
/**
* @author gw
* @date 2019/11/5 0005 下午 22:15
*/ /*
* public static<T> void sort(List<T> list); 将集合中的数据按照默认规则进行排序
*
* 注意:
* sort使用前提:被排序的集合里面存储的元素,必须实现Comparable(接口),重写接口中的方法compareTo,定义排序规则
*
* 升序: this - 参数
* return 0;就是按照原来顺序输出
*
*
* */
public class Demo02Sort {
public static void main(String[] args) {
ArrayList<Person> objects = new ArrayList<>();
objects.add(new Person("小明", 23));
objects.add(new Person("小红", 24));
objects.add(new Person("小绿", 22)); System.out.println("objects = " + objects);
Collections.sort(objects);
System.out.println("objects = " + objects);
}
} class Person implements Comparable<Person> {
private String name;
private int age; @Override
public int compareTo(Person person) {
// return 0;
return this.getAge() - person.getAge(); } @Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
} public Person() {
} public Person(String name, int age) {
this.name = name;
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}
Comparable
/**
* @author gw
* @date 2019/11/5 0005 下午 22:40
*/ /*
* Comparator
* Comparable都是接口
*
* public static <T> void sort(List<T> list, Comparator<? super T> c)
*
* Comparable: 我们的类继承Comparable接口,然后实现里面的CompareTo方法,
* 如何调用:Collections.sort(arrayList)
*
* Comparator: 我们的类不用继承Comparable接口,也不用继承Comparator接口
* 如何调用:Collections.sort(objects, new Comparator<Person1>() { // 匿名类
@Override
public int compare(Person1 person1, Person1 t1) {
int res = person1.getAge() - t1.getAge();
// 前面减去后面,升序排列
if (res == 0) {
return person1.getName().charAt(0) - t1.getName().charAt(0);
}
return res;
}
});
*
* */
public class Demo03SortComparator {
public static void main(String[] args) {
ArrayList<Person1> objects = new ArrayList<>();
objects.add(new Person1("b小明", 23));
objects.add(new Person1("小红", 24));
objects.add(new Person1("小绿", 22));
objects.add(new Person1("a小绿", 23)); System.out.println("objects = " + objects);
Collections.sort(objects, new Comparator<Person1>() {
@Override
public int compare(Person1 person1, Person1 t1) {
// return 0;
int res = person1.getAge() - t1.getAge(); // 前面减去后面,升序排列
if (res == 0) {
return person1.getName().charAt(0) - t1.getName().charAt(0);
}
return res;
}
});
System.out.println("objects = " + objects);
}
} class Person1 {
private String name;
private int age; @Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
} public Person1() {
} public Person1(String name, int age) {
this.name = name;
this.age = age;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public int getAge() {
return age;
} public void setAge(int age) {
this.age = age;
}
}
Comparator
* Comparable: 我们的类继承Comparable接口,然后实现里面的CompareTo方法,
* 如何调用:Collections.sort(arrayList)
*
* Comparator: 我们的类不用继承Comparable接口,也不用继承Comparator接口
* 如何调用:Collections.sort(objects, new Comparator<Person1>() { // 匿名类
@Override
public int compare(Person1 person1, Person1 t1) {
int res = person1.getAge() - t1.getAge();
// 前面减去后面,升序排列
if (res == 0) {
return person1.getName().charAt(0) - t1.getName().charAt(0);
}
return res;
}
});
Java中的sort的更多相关文章
- 关于Java中Collections.sort和Arrays.sort的稳定性问题
一 问题的提出 关于Java中Collections.sort和Arrays.sort的使用,需要注意的是,在本文中,比较的只有Collections.sort(List<T> ele ...
- java中的Sort函数,你值得看
基于C语言中的sort如此这么方便,自然而然,java中也有类似C的sort函数. 1.普通数组:Arrays.sort(数组名,开始位置,结束位置). 2.类中属性排序: 模板: class A { ...
- java中Arrays.sort()对二位数组进行排序
int [][]a = new int [5][2]; //定义一个二维数组,其中所包含的一维数组具有两个元素 对于一个已定义的二位数组a经行如下规则排序,首先按照每一个对应的一维数组第一个元素进行升 ...
- java中Collections.sort排序详解
Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e,f, ...
- 关于Java中Arrays.sort()方法TLE
最近一直在练用Java写题,今天无意发现一道很简单的二分题(链接),我一开始是直接开int[]数组调用Arrays.sort()去排序,没想到TLE了,原来是因为jdk中对于int[]的排序是使用快速 ...
- (网页)java中Collections.sort排序详解(转)
转自CSDN: Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b, ...
- [转]java中Collections.sort排序详解
Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b,c,d,e, ...
- Java中Collections.sort()排序详解
public static void main(String[] args) { List<String> list = new ArrayList<String>(); ...
- Java中Arrays.sort()和Collections.sort()
1.简单示例 sort方法的使用非常的简单明了,下面的例子中,先定义一个比较Dog大小的Comparator,然后将其实例对象作为参数传给sort方法,通过此示例,你应该能够快速掌握Arrays.so ...
随机推荐
- Java 数组复制之clone方法
一.源码 public class Test1 { public static void main(String[] args) { // Student[] arrs = new Student[] ...
- Linux的解压缩相关命令
Linux的解压缩相关命令 知识点: 1.zip命令 2.tar命令 3.压缩和解压常用组合
- ETL工具之——kettle使用简介
ETL工具之——kettle使用简介 https://yq.aliyun.com/articles/157977?spm=5176.10695662.1996646101.searchclickres ...
- mysql AUTO INCREMENT字段 语法
mysql AUTO INCREMENT字段 语法 作用:在新记录插入表中时生成一个唯一的数字 说明:我们通常希望在每次插入新记录时,自动地创建主键字段的值.我们可以在表中创建一个 auto-incr ...
- BZOJ 5004: 开锁魔法II 期望 + 组合
Description 题面:www.lydsy.com/JudgeOnline/upload/task.pdf Input Output 一般概率题有两种套路: 满足条件的方案/总方案. 直接求概率 ...
- JMS学习七(ActiveMQ之Topic的持久订阅)
非持久化订阅持续到它们订阅对象的生命周期.这意味着,客户端只能在订阅者活动时看到相关主题发布的消息.如果订阅者不活动,它会错过相关主题的消息.如果花费较大的开销,订阅者可以被定义为durable(持久 ...
- 20道JS原理题助你面试一臂之力!(转)
20道JS原理题助你面试一臂之力! 前言 本文针对目前常见的面试题,仅提供了相应的核心原理及思路,部分边界细节未处理.后续会持续更新,希望对你有所帮助. 1. 实现一个call函数 // 思路:将要改 ...
- [CSP-S模拟测试]:Walker(数学)
题目传送门(内部题86) 输入格式 第一行$n$接下来$n$行,每行四个浮点数,分别表示变换前的坐标和变换后的坐标 输出格式 第一行浮点数$\theta$以弧度制表示第二行浮点数$scale$第三行两 ...
- PHP mac localhost 环境下发送邮件
转载自:http://mabblog.com/blog/2011/09/lion-smtp-postfix-relay-and-dreamhost/ When developing web-apps ...
- 假设高度已知,请写出三栏布局,其中左栏、右栏各为300px,中间自适应的五种方法
假设高度已知,请写出三栏布局,其中左栏.右栏各为300px,中间自适应的五种方法 HTML CSS 页面布局 题目:假设高度已知,请写出三栏布局,其中左栏.右栏各为300px,中间自适应 <!D ...