java基础---->Comparable和Comparator的使用
Comparable和Comparator都可以实现排序,今天我们就开始两种比较排序接口的学习。
Comparable的使用
一、Comparable的文档说明:
Lists (and arrays) of objects that implement this interface can be sorted automatically by Collections.sort (and Arrays.sort). Objects that implement this interface can be used as keys in a sorted map or as elements in a sorted set, without the need to specify a comparator.
二、Comparable有一个方法需要实现:int compareTo(T o)
Compares this object with the specified object for order. Returns a negative integer, zero, or a positive integer as this object is less than, equal to, or greater than the specified object.
参数:
o - 要比较的对象。
返回:
负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。
抛出:
ClassCastException - 如果指定对象的类型不允许它与此对象进行比较。
三、Comparable的实例代码如下:
定义一个Personal类,实现Comparable类,比较对象是Personal类自己。
package com.huhx.compare;
public class Person implements Comparable<Person> {
private String username;
private int age;
public Person(String username, int age) {
this.username = username;
this.age = age;
}
public String getUsername() {
return username;
}public int getAge() {
return age;
}
@Override
public String toString() {
return "username: " + username + ", age: " + age;
}
// 先age从小到大排序,如果年龄一样,那么username字符升序排序
@Override
public int compareTo(Person person) {
if (age > person.age) {
return 1;
} else if (age == person.age) {
return username.compareTo(person.username);
} else if (age < person.age) {
return -1;
}
return 0;
}
}
写一个测试类CompareTest.java
package com.huhx.compare;
import java.util.Arrays;
public class CompareTest {
public static void main(String[] args) {
Person[] persons = new Person[4];
persons[0] = new Person("huhx", 22);
persons[1] = new Person("Linux", 23);
persons[2] = new Person("Tomhu", 23);
persons[3] = new Person("Tomhu", 24);
Arrays.sort(persons);
for(Person person: persons) {
System.out.println(person);
}
}
}
得到运行结果如下:
username: huhx, age: 22
username: Linux, age: 23
username: Tomhu, age: 23
username: Tomhu, age: 24
Comparator的使用
一、Comparator的文档说明:
A comparison function, which imposes a total ordering on some collection of objects. Comparators can be passed to a sort method (such as Collections.sort or Arrays.sort) to allow precise control over the sort order. Comparators can also be used to control the order of certain data structures (such as sorted sets or sorted maps), or to provide an ordering for collections of objects that don't have a natural ordering.
二、Comparator有一个方法需要实现:int compare(T o1, T o2)
Compares its two arguments for order. Returns a negative integer, zero, or a positive integer as the first argument is less than, equal to, or greater than the second
三、Comparator的实例代码如下
定义一个比较的对象Person类:
package com.huhx.compator;
public class Person {
private String username;
private int age;
public Person(String username, int age) {
this.username = username;
this.age = age;
}
public String getUsername() {
return username;
}public int getAge() {
return age;
}
@Override
public String toString() {
return "username: " + username + ", age: " + age;
}
}
定义一个以Person为比较对象的Comparator:
package com.huhx.compator;
import java.util.Comparator;
public class AgeComparator implements Comparator<Person>{
// 先age从小到大排序,如果年龄一样,那么username字符降序排序
@Override
public int compare(Person person1, Person person2) {
int compare = person1.getAge() - person2.getAge();
if (compare == 0) {
return person2.getUsername().compareTo(person1.getUsername());
}
return compare;
}
}
写一个测试类CompatorTest.java
package com.huhx.compator;
import java.util.TreeSet; public class CompatorTest {
public static void main(String[] args) {
AgeComparator comparator = new AgeComparator();
TreeSet<Person> set = new TreeSet<Person>(comparator);
set.add(new Person("huhx", 22));
set.add(new Person("Linux", 23));
set.add(new Person("Tomhu", 23));
set.add(new Person("Tomhu", 24)); for (Person person : set) {
System.out.println(person);
}
}
}
得到运行结果如下:
username: huhx, age:
username: Tomhu, age:
username: Linux, age:
username: Tomhu, age:
友情链接
java基础---->Comparable和Comparator的使用的更多相关文章
- Java中Comparable和Comparator接口区别分析
Java中Comparable和Comparator接口区别分析 来源:码农网 | 时间:2015-03-16 10:25:20 | 阅读数:8902 [导读] 本文要来详细分析一下Java中Comp ...
- Java 中 Comparable 和 Comparator 比较
Java 中 Comparable 和 Comparator 比较 目录: Comparable Comparator Comparable 和 Comparator比较 第二个例子 之 Compar ...
- Java 中 Comparable 和 Comparator 比较(转)
转自http://www.cnblogs.com/skywang12345/p/3324788.html 本文,先介绍Comparable 和Comparator两个接口,以及它们的差异:接着,通过示 ...
- 夯实Java基础(十五)——Java中Comparable和Comparator
1.前言 对于Java中的对象,我们只能使用基本运算符==.!=来判断一下地址是否相等,不能使用>.<来比较大小.但是在实际的开发中,我们需要对对象进行排序,也就是比较大小,那么应该如何实 ...
- Java中Comparable与Comparator的区别
相同 Comparable和Comparator都是用来实现对象的比较.排序 要想对象比较.排序,都需要实现Comparable或Comparator接口 Comparable和Comparator都 ...
- Java中Comparable和Comparator区别小结
一.Comparable简介 Comparable是排序接口.若一个类实现了Comparable接口,就意味着该类支持排序.实现了Comparable接口的类的对象的列表或数组可以通过Collecti ...
- Java中Comparable和Comparator你知多少?
前言: 我喜欢这种遨游在Java的世界里,精心研究学习新鲜事物的感觉,即便再小再细再微不足道的东西,也让我乐此不疲,同时我也更愿意将我所会的东西分享出来供大家学习以及方便自己日后回顾.好了,闲话不多说 ...
- java中Comparable和Comparator两种比较器的区别
Comparable和Comparator接口都是为了对类进行比较,众所周知,诸如Integer,double等基本数据类型,java可以对他们进行比较,而对于类的比较,需要人工定义比较用到的字段比较 ...
- 【转载】Java中Comparable和Comparator比较
[本文转自]http://www.cnblogs.com/skywang12345/p/3324788.html Comparable 简介 Comparable 是排序接口. 若一个类实现了Comp ...
随机推荐
- 如何在WebService中重载方法
1. 本来在WebService中这样写的重载方法,如下所示: [WebService(Namespace = "http://tempuri.org/")] [WebSer ...
- [小技巧]diff的文件夹忽略使用方式
当我们比较两个文件夹时经常需要忽略.svn或者.git,那么如下 diff -r -x ".git" -x "*.ko" -x "*.o" ...
- 分别通过【buildpath】和【lib】倒入JAR包有什么不同
我们可以通过java虚拟机的类加载器来理解.通过buildpath设置(或添加)程序使用jar包的classpath.Java虚拟机是根据Java ClassLoader(类加载器)决定如何,到那里去 ...
- [ES6]探究数据绑定之Proxy
知识储备 Proxy 方式实现数据绑定中涉及到 Proxy.Reflect.Set.Map 和 WeakMap,这些都是 ES6 的新特性. Proxy Proxy 对象代理,在目标对象之前架设一层拦 ...
- spring—Bean配置
Spring是一个开源的框架,其目标是简化java的开发.为了降低Java开发的复杂性,Spring有如下的特性: >> 基于POJO的轻量级和最小侵入性编程 >> 通过依赖注 ...
- QSignalMapper类处理多信号关联同一个槽的方法(1)
QSignalMapper这个类并不是个新鲜概念, 早在Qt2里就已经存在, 而且它的功能也是始终如一. 不过由于宣传力度不够(例子里涉及到它的很少)了解这个类人可能还不是很多, 所以特此撰文介绍此类 ...
- python中的矩阵、多维数组----numpy
https://docs.scipy.org/doc/numpy-dev/user/quickstart.html (numpy官网一些教程) numpy教程:数组创建 python中的矩阵.多维数 ...
- 标识符的长度应当符合“min-length && max-information”原则
标识符的长度应当符合“min-length && max-information”原则. 几十年前老 ANSI C 规定名字不准超过 6 个字符,现今的 C++/C 不再有此限制.一 ...
- 学习 C++,关键是要理解概念,而不应过于深究语言的技术细节
学习 C++学习 C++,关键是要理解概念,而不应过于深究语言的技术细节. 学习程序设计语言的目的是为了成为一个更好的程序员,也就是说,是为了能更有效率地设计和实现新系统,以及维护旧系统. C++ 支 ...
- CentOS下rpm指令和yum指令详解
centos的软件安装大致可以分为两种类型: [centos]rpm文件安装,使用rpm指令 类似[ubuntu]deb文件安装,使用dpkg指令 [centos]yum安装 类似[ubuntu]ap ...