比较器 comparable与comparator用法
comparable
接口 Comparable<T>
类型参数:T - 可以与此对象进行比较的那些对象的类型
public interface Comparable<T>
此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序,类的 compareTo 方法被称为它的自然比较方法。
实现此接口的对象列表(和数组)可以通过 Collections.sort(和 Arrays.sort)进行自动排序。实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。
负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。
compareTo(对象)
if(this. > ) return -1; //高到低排序
例子:学生分数高到低,年龄低到高排序
package com.ij34; /**
* Created by Admin on 2018/3/7.
*/
public class Student implements Comparable<Student>{
private String name;
private int age;
private float score; 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;
} public float getScore() {
return score;
} public void setScore(float score) {
this.score = score;
} public Student(String name, int age, float score) {
this.name = name;
this.age = age;
this.score = score;
} @Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", score=" + score +
'}';
} @Override
public int compareTo(Student o) {
if (this.score > o.score) return -1;
else if (this.score < o.score) return 1;
else{
if (this.age > o.age) return 1;
else if (this.age < o.age) return -1;
else return 0;
}
}
}
package com.ij34; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections; /**
* Created by Admin on 2018/3/7.
*/
public class ComparableStudentTest {
public static void main(String[] args) {
ArrayList<Student> arrays=new ArrayList<Student>();
Student a=new Student("李白",23,88);
Student b=new Student("张三",21,80);
Student c=new Student("李四",22,78);
Student d=new Student("萧峰",24,77);
arrays.add(a);
arrays.add(b);
arrays.add(c);
arrays.add(d);
Collections.sort(arrays,Student::compareTo);
for(Student s:arrays){
System.out.println(s);
}
}
}

comparator
java.util
接口 Comparator<T>
类型参数:T - 此 Comparator 可以比较的对象类型
强行对某个对象 collection 进行整体排序 的比较函数。可以将 Comparator 传递给 sort 方法(如 Collections.sort 或 Arrays.sort),从而允许在排序顺序上实现精确控制。还可以使用 Comparator 来控制某些数据结构(如有序 set或有序映射)的顺序,或者为那些没有自然顺序的对象 collection 提供排序。
| int | compare(T o1, T o2) 比较用来排序的两个参数 |
| boolean | equals(Object obj) 指示某个其他对象是否“等于”此 Comparator |
package com.ij34; /**
* Created by Admin on 2018/3/7.
*/
public class Student{
private String name;
private int age;
private float score; 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;
} public float getScore() {
return score;
} public void setScore(float score) {
this.score = score;
} public Student(String name, int age, float score) {
this.name = name;
this.age = age;
this.score = score;
} @Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
", score=" + score +
'}';
}
}
package com.ij34; import java.util.Comparator; /**
* Created by Admin on 2018/3/7.
*/
public class Studentcomparator implements Comparator<Student>{
public int compare(Student o1,Student o2){
if(o1.getScore()>o2.getScore())return -1;
else if(o1.getScore()<o2.getScore()) return 1;
else {
if (o1.getAge()>o2.getAge()) return 1;
else if (o1.getAge()<o2.getAge()) return -1;
else return 0;
}
}
}
package com.ij34; import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections; /**
* Created by Admin on 2018/3/7.
*/
public class ComparableStudentTest {
public static void main(String[] args) {
ArrayList<Student> arrays=new ArrayList<Student>();
Student a=new Student("李白",23,88);
Student b=new Student("张三",21,80);
Student c=new Student("李四",22,78);
Student d=new Student("萧峰",24,77);
arrays.add(a);
arrays.add(b);
arrays.add(c);
arrays.add(d);
Collections.sort(arrays,new Studentcomparator());
for(Student s:arrays){
System.out.println(s);
}
}
}

比较器 comparable与comparator用法的更多相关文章
- 比较器comparable与comparator的使用
在Java学习和使用里,工具类与算法类(collections和Arrays)也是我们使用比较多的,在它们里面就包含了comparable与comparator这两种比较器. 一.比较器的分类与概念 ...
- 比较器Comparable和Comparator
在java中要实现自定义类的比较,提供了以下两个接口: Comparable(内部排序) int compareTo(Object obj);返回值为int,默认升序排序 Comparator(外部排 ...
- Java的比较器Comparable与Comparator
在Java中有两个比较器:Comparable.Comparator 对于Integer.Double等等类型,可以直接对他们进行比较,因为已经实现了比较的方式,然而在平时常常会面临需要对集合进行排序 ...
- Java原来如此-比较器(Comparable、Comparator)
有时候需要对Collection或者不为单一数字的Array进行比较,有两种方法,1是实现Comparable接口,2是实现Comparator接口. 1.ComParable接口 Comparabl ...
- 小白养成记——Java比较器Comparable和Comparator
一.使用情景 1. 调用Arrays.sort()方法或Collections.sort()方法对自定义类的对象排序 以Arrays.sort()为例.假定有如下自定义的Person类 1 publ ...
- Comparable和Comparator的区别
Comparable Comparable可以认为是一个内比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,至于具体和另一个实现了Comparable接口的类如何比较 ...
- comparable和comparator
Comparable Comparable可以认为是一个内部比较器,实现了Comparable接口的类有一个特点,就是这些类是可以和自己比较的,在compareTo方法中指定具体的比较方法. comp ...
- 关于comparable与comparator的用法(即自定义集合框架用法 )
package javastudy; import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet; ...
- Comparable和Comparator的区别&Collections.sort的两种用法
在Java集合的学习中,我们明白了: 看到tree,可以按顺序进行排列,就要想到两个接口.Comparable(集合中元素实现这个接口,元素自身具备可比性),Comparator(比较器,传入容器构造 ...
随机推荐
- less环境的安装与搭建
less: Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量.混合(mixin).函数等功能,让 CSS 更易维护.方便制作主题.扩充.Less 可以运行在 Node 或浏 ...
- 让一个数组中存在N多个函数。让每个函数执行的 时候自动加1
function test(){ var arr = [ ]; for (var i = 0; i < 10; i++) { (function(i){ arr[i] = function(){ ...
- JVM学习笔记:对象的创建
第一步,类检测 1.当虚拟机遇到一条new指令时,首先判断new的对象是否能在运行时常量池中找到对应类的类名(书中原话:检查这个指令的参数能佛在常量池中定位到一个类的符号引用).如果没找到,应该就会抛 ...
- [CERC2017] Intrinsic Interval
首先理清这奇葩题意表述 给出一个\(1\)到\(n\)的排列\(p[]\)和\(m\)次询问,每次询问覆盖区间\([l,r]\)的最小区间\([a,b]\),满足\([a,b]\)内的元素排序后是连续 ...
- 不是 HTTPS 拖慢网站速度,而是优化做的不够优秀
HTTPS(全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,简单讲是 HTTP 的安全版,即 HTT ...
- Elasticsearch Search API
当执行一个搜索时,它将这个搜索请求广播给所有的索引分片.可以通过提供路由参数来控制要搜索哪些分片.例如,当检索tweets这个索引时,路由参数可以设置为用户名: curl -X POST " ...
- Solr 11 - Solr集群模式的部署(基于Solr 4.10.4搭建SolrCloud)
目录 1 SolrCloud结构说明 2 环境的安装 2.1 环境说明 2.2 部署并启动ZooKeeper集群 2.3 部署Solr单机服务 2.4 添加Solr的索引库 3 部署Solr集群服务( ...
- Python进阶:自定义对象实现切片功能
2018-12-31 更新声明:切片系列文章本是分三篇写成,现已合并成一篇.合并后,修正了一些严重的错误(如自定义序列切片的部分),还对行文结构与章节衔接做了大量改动.原系列的单篇就不删除了,毕竟也是 ...
- 设计模式总结篇系列:建造者模式(Builder)
关于建造者模式网上有很多文章,也有些不同的理解.在此结合网上其他文章对建造者模式进行总结. 总体说来,建造者模式适合于一个具有较多的零件(属性)的产品(对象)的创建过程.根据产品创建过程中零件的构造是 ...
- 找到bug的根源,问五次为什么
在学习<问题分析与解决>时学到了一种找到问题根源的方法——问五次为什么.具体内容是:当遇到一个问题,不要只看当前答案,要继续往下问,为什么,连问五次,就能够找到更深层次的问题.最近在复盘b ...