Comparable Comparator具体区别

问题描述

Comparable Comparator在对对象排序上具体是什么区别???不要说什么俩个接口里的方法不一样什么我是问具体排序上俩个有区别么???还有个问题:JavaEye怎么拿分???新注册的就这么几分问俩次问题就光了新手又不会帮人家解决问题哪里弄分???

解决方案

当需要排序的集合或数组不是单纯的数字型时,通常可以使用Comparator或Comparable,以简单的方式实现对象排序或自定义排序。一、Comparator强行对某个对象collection进行整体排序的比较函数,可以将Comparator传递给Collections.sort或Arrays.sort。接口方法: /** * @return o1小于、等于或大于o2,分别返回负整数、零或正整数。 */ int compare(Object o1, Object o2);案例:import java.util.Arrays;import java.util.Comparator;public class SampleComparator implements Comparator { public int compare(Object o1, Object o2) { return toInt(o1) - toInt(o2); } private int toInt(Object o) { String str = (String) o; str = str.replaceAll("一", "1"); str = str.replaceAll("二", "2"); str = str.replaceAll("三", "3"); // return Integer.parseInt(str); } /** * 测试方法 */ public static void main(String[] args) { String[] array = new String[] { "一二", "三", "二" }; Arrays.sort(array, new SampleComparator()); for (int i = 0; i < array.length; i++) { System.out.println(array[i]); } }} 二、Comparable强行对实现它的每个类的对象进行整体排序,实现此接口的对象列表(和数组)可以通过Collections.sort或Arrays.sort进行自动排序。接口方法: /** * @return 该对象小于、等于或大于指定对象o,分别返回负整数、零或正整数。 */ int compareTo(Object o);假设对象User,需要按年龄排序:public class User { private String id; private int age; public User(String id, int age) { this.id = id; this.age = age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getId() { return id; } public void setId(String id) { this.id = id; }}改造后的对象:import java.util.Arrays;public class User implements Comparable { private String id; private int age; public User(String id, int age) { this.id = id; this.age = age; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getId() { return id; } public void setId(String id) { this.id = id; } public int compareTo(Object o) { return this.age - ((User) o).getAge(); } /** * 测试方法 */ public static void main(String[] args) { User[] users = new User[] { new User("a", 30), new User("b", 20) }; Arrays.sort(users); for (int i = 0; i < users.length; i++) { User user = users[i]; System.out.println(user.getId() + " " + user.getAge()); } }}三、Comparator和Comparable的区别先看一下使用Comparator对User集合实现排序的方式:import java.util.Arrays;import java.util.Comparator;public class UserComparator implements Comparator { public int compare(Object o1, Object o2) { return ((User) o1).getAge() - ((User) o2).getAge(); } /** * 测试方法 */ public static void main(String[] args) { User[] users = new User[] { new User("a", 30), new User("b", 20) }; Arrays.sort(users, new UserComparator()); for (int i = 0; i < users.length; i++) { User user = users[i]; System.out.println(user.getId() + " " + user.getAge()); } }}一个类实现了Camparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。Comparator可以看成一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:1、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身2、可以使用多种排序标准,比如升序、降序等
解决方案二:
这两个的差别可以看看这个文章,写的更加详细http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt159
解决方案三:
Comparable 用作默认的比较方式Comparator 用作自定义的比较方式,当默认的比较方式不适用时或者没有提供默认的比较方式,使用Comparator就非常有用。像Arrays和Collections中的排序方法,当不指定Comparator时使用的就是默认排序方式,也就是使用Comparable。指定Comparator时就是使用提供的比较器。sort(Object[]) 所有的对象都必须实现Comparable接口,它用来确定对象之间的大小关系sort(Object[], Comparator) 对象不必实现Comparable接口,由Comparator来确定对象之间的大小关系。
解决方案四:
上面的例子可以看出Comparator 是不对排序对象本身做修改。Comparable 则需要排序对象继承

时间: 2024-09-20 05:55:04

Comparable Comparator具体区别的相关文章

comparator接口与Comparable接口的区别

Comparable & Comparator 都是用来实现集合中元素的比较.排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法. Comparator位于包java.util下,而Comparable位于包   java.lang下 Comparable 是一个对象本身就已经支持自比较所需要实现的接口(如 St

comparable和Comparator的区别

Comparable & Comparator 都是用来实现集合中的排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法. 具体请看 <Thinking in java> Comparable 是一个对象本身就已经支持自比较所需要实现的接口(如 String.Integer 自己就可以完成比较大小操作)

浅析Java中comparator接口与Comparable接口的区别_java

Comparable 简介 Comparable 是排序接口. 若一个类实现了Comparable接口,就意味着"该类支持排序".  即然实现Comparable接口的类支持排序,假设现在存在"实现Comparable接口的类的对象的List列表(或数组)",则该List列表(或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序. 此外,"实现Comparable接口的类的对象"可以用作"有序映射(如

Java中Comparable与Comparator的区别

一.概述 Comparable和Comparator都是用来实现集合中元素的比较.排序的. Comparable是在集合内部定义的方法实现的排序,位于java.util下. Comparator是在集合外部实现的排序,位于java.lang下. Comparable是一个对象本身就已经支持自比较所需要实现的接口,如String.Integer自己就实现了Comparable接口,可完成比较大小操作.自定义类要在加入list容器中后能够排序,也可以实现Comparable接口,在用Collecti

Comparable与Comparator的区别

    前几天在项目中遇到了一个将复杂对象进行排序的问题:计算BingMap地图上距离当前位置5KM内发生事故(TrafficIncident)的点到当前位置的距离,并按距离升序排序.距离都算出来了,但这些TrafficIncident对象的排序却难到了我.经同事提醒,Comparable或Comparator是一个不错的选择.于是在网上搜索了一些资料,总结下来. 方式一: 实现Comparable接口     Comparable是java.lang包下的一个接口,该接口里只有一个compar

Comparable Comparator equals

为了让类的对象间可以排序,通常有两种方法--Comparable<T> 与 Comparator<T>. 为了判断两个对象是否相等与Set中去重,通常重写根类的equals()方法. 为了逻辑一致:强烈建议重写comparableTo()后也重写equals()方法. Comparable泛型接口 int java.lang.Comparable.compareTo(T o) 本对象与参数进行对比.返回为负表示小于,零表示相等,正数表示大于. Compares this objec

Java Comparable 和 Comparator 的详解及区别_java

Java Comparable 和 Comparator 的详解及区别 Java 中为我们提供了两种比较机制:Comparable 和 Comparator,他们之间有什么区别呢?今天来了解一下. Comparable 自然排序 Comparable 在 java.lang 包下,是一个接口,内部只有一个方法 compareTo(): public interface Comparable<T> { public int compareTo(T o); } Comparable 可以让实现它的

对比Java中的Comparable排序接口和Comparator比较器接口_java

ComparableComparable 是排序接口. 若一个类实现了Comparable接口,就意味着"该类支持排序". 即然实现Comparable接口的类支持排序,假设现在存在"实现Comparable接口的类的对象的List列表(或数组)",则该List列表(或数组)可以通过 Collections.sort(或 Arrays.sort)进行排序. 此外,"实现Comparable接口的类的对象"可以用作"有序映射(如TreeM

Java 集合概览

Java Collection API提供了一些列的类和接口来帮助我们存储和管理对象集合.其实Java中的集合工作起来像是一个数组,不过集合的大小是可以动态改变的,而且集合也提供了更多高级功能.有了JavaCollectionAPI,我们就不需要自己编写集合类了,大部分Java集合类都位于java.util包里面,还有一些和并发相关的集合类位于java.util.concurrent包中.下面就介绍一下Java API 为我们提供的这些集合类. 一.Java 集合概览 Java中的集合有两大类,