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 ...
随机推荐
- Tomcat性能优化之(一) 启动GZIP压缩
Tomcat性能优化之(一) 启动GZIP压缩 1:设置TOMCAT启用GZIP压缩,通过浏览器HTTP访问对应的资源会根据配置进行压缩. <Connector port="8080& ...
- 如何去掉drwxr-xr-x@中的@符号Linux文件扩展信息
如何去掉drwxr-xr-x@中的@符号Linux文件扩展信息ls -lart drwxrwxrwx@ 10 rlanffy staff 340B 3 6 2015 files-rwxrwxrwx@ ...
- CSS编写指导规范和建议
在参与规模庞大.历时漫长且参与人数众多的项目时,所有开发者遵守如下规则极为重要: 保持 CSS 易于维护 保持代码清晰易懂 保持 CSS 的可拓展性 为了实现这一目标,我们要采用诸多方法. 本文档第一 ...
- 关于MyEclipse项目的名字的修改对项目导入导出的影响
不要修改项目名字,不管是在MyEclipse中(.project文件里面的额name会变)还是在G:\MyEclipseData目录下(.project文件里面的额name不会变),否则导入的时候不能 ...
- Spring 4 官方文档学习(十一)Web MVC 框架之locales
http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-localeresolve ...
- 在tomcat下context.xml中配置各种数据库连接池(JNDI)
1. 首先,需要为数据源配置一个JNDI资源.我们的数据源JNDI资源应该定义在context元素中.在tomcat6版本中,context元素已经从server.xml文件中独立出来了,放在一个 ...
- 帝国cms的list.var中使用php函数
$r[title] = esub($r[title],8,'...'); //截取前8个字符,多出部分用...代替 $r[title] = str_replace("lhj",&q ...
- linux -- Ubuntu开启root账户,并切换到root用户登陆
启用root账户 ubuntu 的root账户具有最高的系统权限,它类似于windows系统中的管理员账号,但是比windows系统中管理员账号的权限更高,一般都情况下不要使用root账户,但是有的时 ...
- MySQL Date函数的正确用法
以下的文章主要介绍的是MySQL Date函数的实际应用其中包括如何获取当前时间的具体操作,Unix时间的具体应用,时间前后.时间间隔与时间转换的实际内容描述,以下就是文章的主要内容. MySQL D ...
- bootstrap+PHP表单验证
来源:http://www.sucaihuo.com/php/1814.html demo http://www.sucaihuo.com/jquery/18/1814/demo/