- 浏览: 347088 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
随风逐云:
两个===
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 2448serialver用于生成序列化的serialVersion ... -
java String的对象创建
2013-01-09 16:10 882一个常见的面试题: 1: String str = ... -
java的Access restriction错误
2012-03-06 22:48 3305在编写代码时,突然出现:Access restriction: ... -
switch
2011-12-23 10:16 1050在jdk1.6之前,switch的类型是int或Integer ... -
Random的种子
2011-11-30 08:52 1498若两个Random实例用相同的种子,并对他们以同样的顺序调用方 ... -
不通过中间变量交换整型数
2011-11-08 14:05 960package com.randy.generic; p ... -
Integer的一个小秘密
2011-10-17 13:26 1105看一个程序: import java.lang.Intege ... -
date的比较大小
2011-10-09 14:36 19144两个Date类型的变量可以通过compareTo方法来比较。此 ... -
内部类中变量的查找
2011-10-09 08:22 900在非静态内部类的方法中访问某个变量时,系统优先在该方法内查找是 ... -
内部类权限设置
2011-10-09 08:02 944java类的访问权限设置只能是默认或者public修饰,一个文 ... -
接口与抽象类理解
2011-09-30 16:49 920接口与抽象类。 接口更适用于一个规范,定义一个规范,然后实现此 ... -
final的理解
2011-09-29 14:24 935final修饰的变量分为基本类型和引用类型。两者最大的差别在于 ... -
简单多态代码
2011-09-29 13:30 1175java语言3大特征之一— ... -
java的对象创建
2011-09-28 18:03 881java对象的创建其实不是完全依赖构造器的,其实在构造器执行前 ... -
java的参数都是值传递的
2011-09-28 15:37 1125java中没有引用传递的概念。 基本类型肯定是值传递了,所以在 ... -
java的classpath环境变量
2011-09-28 14:12 1044以前很多java入门书籍在讲解java环境配置的时候都要配置d ... -
junit4中的long
2011-09-27 11:28 880junit这个自动测试工具,是很好用的。但有个地方需要注意,就 ... -
再谈可变参数
2011-09-26 10:36 1124java方法可以重载,通过 ... -
List的subList
2011-09-23 13:59 1178List也可以取她的子List,方法是subList(int ...
相关推荐
C和Java都有相应的实现,例如,快速排序在C中的实现可能涉及递归和指针操作,而在Java中,我们可以利用内置的Comparable接口或Comparator接口进行排序。 2. **查找算法**:查找算法帮助我们在数据集中找到特定元素...
- 了解Java中的Comparable和Comparator接口,用于自定义排序规则。 - Java的并发库如ConcurrentHashMap,适用于多线程环境下的数据结构操作。 通过深入学习数据结构和算法,可以提升编程能力,解决复杂问题,并为...
- **接口与类的使用**:如Comparable和Comparator接口,用于定制比较逻辑。 - **多线程与并发**:在数据结构和算法中,如何处理线程安全和并发访问问题。 - **异常处理**:在实现过程中,如何正确处理可能出现的...
这些排序算法是数据处理的基础,Java中的Arrays类提供了排序接口,而自定义排序则可以通过Comparable或Comparator接口实现。 2. **查找算法**:如二分查找、哈希查找。二分查找在有序数组中效率很高,而哈希表则能...
这一步可以通过实现`Comparable`接口或者使用`Comparator`进行排序,例如`Arrays.sort(points, Comparator.comparingDouble(p -> p.x))`。 3. **分治递归**: - **基线情况**:如果点的数量小于等于4,我们可以...
- **接口**:如Comparable和Comparator,用于比较对象,支持自定义排序规则。 - **并发编程**:Java提供了synchronized、Lock等机制,支持多线程环境下的数据结构操作。 4. **高级主题**: - **并发数据结构**:...
- **Comparable与Comparator**:用于对象比较排序,Comparable定义自然顺序,Comparator自定义比较规则。 - **List, Set, Queue等接口**:定义了各种数据结构的行为规范。 7. **文件与I/O流**: - 文件操作:...
如果你需要自定义树结构,可以实现Comparable接口或者提供Comparator。 5. **哈希表**:HashMap是Java中最常用的哈希表实现,提供了O(1)的平均时间复杂度。如果需要保证元素的唯一性,可以使用HashSet。 6. **图...
Java中,可以利用Collections.sort()方法对List进行排序,但对于自定义类型,需要实现Comparable接口或提供Comparator。例如,快速排序的Java实现通常涉及到递归和枢轴元素的选择策略。 二、搜索算法 搜索算法主要...
- **接口与抽象类**:Comparable和Comparator接口,以及如何自定义比较逻辑。 - **泛型**:理解和使用泛型来提高代码的复用性和安全性。 - **异常处理**:掌握try-catch-finally语句块,理解Checked和Unchecked...
- **接口与多态**:实现面向对象设计,如Comparable和Comparator接口。 - **异常处理**:捕获和处理程序运行时可能出现的问题。 - **IO流**:处理输入输出,如BufferedReader、Scanner用于读取用户输入,...
对于自定义类,需要实现Comparable接口或提供Comparator。例如,快速排序是一种高效的算法,通过分治策略实现,其Java实现涉及递归和数组操作。 2. **搜索算法**:二分查找适用于已排序的数组,它通过每次比较中间...
Java中的Arrays.sort()函数可以处理基本类型和对象数组的排序,但对于自定义数据结构,我们可能需要实现Comparable接口或者提供Comparator。在LeetCode中,你会遇到快速排序、归并排序、堆排序等高级排序算法的实现...
随着应用场景的扩展,研究者们提出了多种算法来解决这个问题,其中不仅包括单一最短路径的计算,也包括了求解多条最短路径的需求。本篇将详细介绍如何利用Java语言实现一种名为k-shortest-paths(KSP)的算法,该...
- **Comparable和Comparator**:实现这两个接口可以定制元素的比较逻辑,用于排序。 - **并发编程**:Java的synchronized关键字、 volatile变量、线程池、Lock接口等,用于多线程环境下的数据同步和控制。 4. **...
7. 二分查找:Java的Comparable和Comparator接口可用于实现自定义比较逻辑,方便进行二分查找。 8. 泛型与模板方法:利用泛型提高代码复用性,设计模式中的模板方法可抽象出公共操作流程。 9. 并发编程:对于多...