- 浏览: 343504 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
随风逐云:
两个===
JS中的=,==,=== -
cike8899:
正在想这个问题,看到了你的回答,谢谢!
数组与可变参数 -
bendan123812:
我不知道网上这类maven+jetty热部署是怎么来的,好多人 ...
maven web项目配置jetty热部署 -
rambolovepanda:
个人还是比较喜欢 sass语法 不需要{ 更接近ruby ...
sass技术中后缀名.sass和.scss的区别与个人推荐 -
Horse_Chasing:
可不可以自己独立配置插件的方法,不要放在plugins文件夹里 ...
eclipse添加jqueryWTP插件使用jQuery
Comparator接口,实现此接口的类就是一个排序器,Arrays和Collections都能在sort()方法的参数中指明排序方式,即实现Comparator接口的类的示例。
User类:
ComparatorUser类;
结果:
这里的ComparatorUser就是一个排序器。只不过我将测试代码写在此类里边了。
写在外边的情况,User类不变,
ComparatorUser类:
测试类:
输出结果:
实现Comparable接口的类在进行排序时,就会默认对其用自身的排序机制进行排序。
结果:
总结:
Comparator是排序器,是一种规则,
实现Comparable接口,就说明,某个类有自己定义的排序规则。
如果对已经实现Comparable的类进行指定排序器的话,编译就会出错。
User类:
public class User { private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } }
ComparatorUser类;
import java.util.Arrays; import java.util.Comparator; public class ComparatorUser implements Comparator<User> { /** * @param args */ public static void main(String[] args) { User[] users = new User[] { new User("1", 15), new User("2", 19), new User("3", 17) }; for(User user : users) { System.out.println(user.getName() + ":" + user.getAge()); } Arrays.sort(users, new ComparatorUser()); for(User user : users) { System.out.println(user.getName() + ":" + user.getAge()); } } @Override public int compare(User user1, User user2) { return ((User) user1).getAge() - ((User) user2).getAge(); } }
结果:
1:15 2:19 3:17 1:15 3:17 2:19
这里的ComparatorUser就是一个排序器。只不过我将测试代码写在此类里边了。
写在外边的情况,User类不变,
ComparatorUser类:
import java.util.Comparator; public class ComparatorUser implements Comparator<User> { @Override public int compare(User user1, User user2) { return ((User) user1).getAge() - ((User) user2).getAge(); } }
测试类:
import java.util.Arrays; public class ComparatorTest { /** * @param args */ public static void main(String[] args) { User[] users = new User[] { new User("jin", 18), new User("gui", 19), new User("jin", 15), new User("chao", 20) }; for(User user : users) { System.out.println(user.getName() + ": " + user.getAge()); } Arrays.sort(users, new ComparatorUser()); for(User user : users) { System.out.println(user.getName() + ": " + user.getAge()); } } }
输出结果:
jin: 18 gui: 19 jin: 15 chao: 20 jin: 15 jin: 18 gui: 19 chao: 20
实现Comparable接口的类在进行排序时,就会默认对其用自身的排序机制进行排序。
import java.util.Arrays; public class ComparableUser implements Comparable<ComparableUser> { private String name; private int age; public ComparableUser(String name, int age) { this.age = age; this.name = name; } 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; } /** * @param args */ public static void main(String[] args) { ComparableUser[] users = new ComparableUser[] { new ComparableUser("jin", 15), new ComparableUser("gui", 19), new ComparableUser("chao", 18), new ComparableUser("jin", 17) }; for(ComparableUser user : users) { System.out.println(user.getName() + ":" + user.getAge()); } Arrays.sort(users); for(ComparableUser user : users) { System.out.println(user.getName() + ":" + user.getAge()); } } @Override public int compareTo(ComparableUser user) { if(this.name.compareTo(user.getName()) != 0) { return this.name.compareTo(user.getName()); } return this.age - user.age; } }
结果:
jin:15 gui:19 chao:18 jin:17 chao:18 gui:19 jin:15 jin:17
总结:
Comparator是排序器,是一种规则,
实现Comparable接口,就说明,某个类有自己定义的排序规则。
如果对已经实现Comparable的类进行指定排序器的话,编译就会出错。
发表评论
-
读《java优化编程》笔记
2013-04-12 23:30 41.尽量把变量声明代码放置在一个代码块的开始处,并在声明的 ... -
java的serialver工具使用
2013-04-09 14:46 2407serialver用于生成序列化的serialVersion ... -
java String的对象创建
2013-01-09 16:10 850一个常见的面试题: 1: String str = ... -
java的Access restriction错误
2012-03-06 22:48 3279在编写代码时,突然出现:Access restriction: ... -
switch
2011-12-23 10:16 1019在jdk1.6之前,switch的类型是int或Integer ... -
Random的种子
2011-11-30 08:52 1466若两个Random实例用相同的种子,并对他们以同样的顺序调用方 ... -
不通过中间变量交换整型数
2011-11-08 14:05 934package com.randy.generic; p ... -
Integer的一个小秘密
2011-10-17 13:26 1064看一个程序: import java.lang.Intege ... -
date的比较大小
2011-10-09 14:36 19114两个Date类型的变量可以通过compareTo方法来比较。此 ... -
内部类中变量的查找
2011-10-09 08:22 872在非静态内部类的方法中访问某个变量时,系统优先在该方法内查找是 ... -
内部类权限设置
2011-10-09 08:02 910java类的访问权限设置只能是默认或者public修饰,一个文 ... -
接口与抽象类理解
2011-09-30 16:49 888接口与抽象类。 接口更适用于一个规范,定义一个规范,然后实现此 ... -
final的理解
2011-09-29 14:24 905final修饰的变量分为基本类型和引用类型。两者最大的差别在于 ... -
简单多态代码
2011-09-29 13:30 1142java语言3大特征之一— ... -
java的对象创建
2011-09-28 18:03 857java对象的创建其实不是完全依赖构造器的,其实在构造器执行前 ... -
java的参数都是值传递的
2011-09-28 15:37 1097java中没有引用传递的概念。 基本类型肯定是值传递了,所以在 ... -
java的classpath环境变量
2011-09-28 14:12 1019以前很多java入门书籍在讲解java环境配置的时候都要配置d ... -
junit4中的long
2011-09-27 11:28 845junit这个自动测试工具,是很好用的。但有个地方需要注意,就 ... -
再谈可变参数
2011-09-26 10:36 1094java方法可以重载,通过 ... -
List的subList
2011-09-23 13:59 1145List也可以取她的子List,方法是subList(int ...
相关推荐
java排序Comparator和Comparable
教你学会Comparator和Comparable
java的Comparator和Comparable
comparator接口与Comparable接口的区别
Java-中的-Comparator-和-Comparable.md
NULL 博文链接:https://hellogava.iteye.com/blog/1570101
本文,先介绍Comparable 和Comparator两个接口,以及它们的差异;接着,通过示例,对它们的使用方法进行说明
Comparable&Comparator区别,看完就明白了
通过简单的例子初步了解Comparable和Comparator的使用,注释很详细
主要介绍了java 中Comparable与Comparator详解与比较的相关资料,需要的朋友可以参考下
Java中Comparable和Comparator的区别共3页.pdf.zip
详细的介绍了Java中Comparable与Comparator的区别
1. Comparator 和 Comparable 相同的地方 他们都是java的一个接口, 并且是用来对自定义的class比较大小的, 什么是自定义class: 如 public class Person{ String name; int age }. 当我们有这么一个...
用Comparator 的好处是不需要修改源代码, 而是另外实现一个比较器, 当某个自定义的对象需要作比较的时候,把比较器和对象一起传递过去就可以比大小了, 并
Comparable与Comparator的区别Java开发Java经验技巧共3页.pdf.zip
主要介绍了Java Comparable和Comparator对比详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了详解Java中Comparable和Comparator接口的区别的相关资料,希望通过本文大家能彻底掌握这部分内容,需要的朋友可以参考下
NULL 博文链接:https://gghaomm.iteye.com/blog/1753970