最好去看源代码,都有原文解释,很清楚的
我也一直不甚懂,尤其是前者的作用!
直到昨天将这几个类的源代码仔仔细细看了一遍才有体会
源代码连接:
http://javaresearch.gro.clinux.org/jdk140/

解决方案 »

  1.   

    实现Comparable的compareTo方法该如何写?
      

  2.   

    Comparator从来没用过,不知道有谁用过Collection是一类对象容器的接口
    Collections是Collection的util
      

  3.   

    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) to allow precise control over the sort order. Comparators can also be used to control the order of certain data structures (such as TreeSet or TreeMap).Comparable:This interface imposes a total ordering on the objects of each class that implements it. This ordering is referred to as the class's natural ordering, and the class's compareTo method is referred to as its natural comparison method.
      

  4.   

    1。 关于Comparable和Comparator,昨天刚好有个帖子,整理了一下。public interface Comparable {   public abstract int compareTo(Object o); 
    }
     
    看Comparable的方法,可以看到是要用类继承Comparable,再重写compareTo(Object o);这个方法。会把 o cast到当前的类。再在方法里比较当前的对象和o 的顺序或者大小,如果大于或者在集合里是后面就返回正值,小于或者前面就返回负值,相当或者顺序无关就返回0。用法:public class Some implements Comparable {   public Some () {
       }   public int compareTo(Object obj) {
         //比较this 中的属性和(Some)obj中的属性,做判断。
       }}排序或者比较时://在其他类中使用,s是一个集合里有很多Some对象。
    Collections.sort(s);
    另一个Comparatorpublic interface Comparator {
       public abstract int compare(Object o1, Object o2); 
       public abstract boolean equals(Object obj); 
    }
    Comparator是在java.util这个包里,一般来说当对于要根据其他属性,或变量来定义一个类的中对象和另一个对象的顺序时,会用到Comparator,如果正常按照自然顺序排列,直接implements  Comparable就可以。或者因为它的compare方法传入的是两个要比较的对象,所以可以独立于要比较的对象。用法:public class Some () {
       }import java.util.Comparator;public class SomeComparator implements Comparator{public int compare(Some s1,Some s2){
    //写代码,获得.sequence 和比较一下s1,s2,
    //如果返回正值,s1大。如果返回负值,s2大。
    }在其他类,你需要排序的地方
    public Collection getcollectionOrderby(List l) {
    ///l里面都是Some的对象
    retuen Collections.sort(l,new SomeComparator());
    }
    对于下面的也通用:
    Arrays.{binarySearch(), sort()}, Collections.{binarySearch(), max(), min(), sort()},  
    2。Collections 是JAVA中一个实用类,用来对Collection,ArrayList,Set等进行基本的操作,封装了常用的方法,都是静态的,可以直接调用。
    Collection是一个interface,他是JAVA中所有Collection Framework里的根节点,其他集合类都要继承他。看API有说明。
      

  5.   

    //写代码,获得.sequence 和比较一下s1,s2,
    这句应该是
    //写代码,比较一下s1,s2,Sorry.
      

  6.   

    Comparator and Comparable 都是接口前者是个比较器,自己想比较什么就比较什么后者表示自己这个类“可比较”
      

  7.   

    Collection是接口,Collections是类,这是二者最明显的区别。Collections提供了一些static方法来对 Collection对象进行处理,比如:对Collection对象的复制、添加元素、修改元素、对元素进行排序、交换俩个元素的位置、取 Collection的子集等等操作。另外Collection是j2sdk中集合框架的根接口,所有的其他特殊类型的结合接口或者类都直接或间接的实现了这个接口。而Comparator 和Comparable都是接口,俩者之间可以说没什么关系。Comarator位于包java.util下,而Comparable位于包 java.lang下。通俗的说:Comparator是一个比较器,相当于一种工具,它定义了俩个方法,分别是 int compare(T o1, T o2)和 boolean (Object obj),所以你可以通过实现这个接口来是定义你所有需要的比较器,如比较俩个人的大小,对象人有姓名、性别、年龄等属性,你在定义这个比较器的时候就可以在compare方法中对传入的俩个参数(person1,person2)的年龄进行大小的比较,从而确定这俩个人的大小。
    而Comparable接口是你要是定义的类要实现的一个接口(如果这个类的实例需要和同一类的别的实例比较大小,而这个大小关系你希望是你自己定义的),它只提供了 int compareTo(T o)方法,也就是说假如我定义了一个Person类,这个类实现了 Comparable接口,那么当我实例化Person类的person1后,我想比较person1和一个现有的Person对象person2的大小时,我就可以这样来调用:person1.comparTo(person2),通过返回值就可以判断了;而此时如果你定义了一个 PersonComparator(实现了Comparator接口)的话,那你就可以这样:PersonComparator comparator= new PersonComparator();comparator.compare(person1,person2);。
    详细的说明看看sun的java API文档,说的很清楚。
      

  8.   

    你可以看看Collections.sort(Object o, Comparator c)这个方法的例子,你就知道Comparator该怎么用了。
      

  9.   

    Comparator体现了设计模式的“策略模式”。
    比如Collections.sort(Object o, Comparator c)是用来排序的,但究竟根据什么排序,确切的是怎样定义数组(也可以是集合类对象)中元素的大小关系,比如a1为什么比a2大,这就需要你给它一个策略,而Comparator c就是你传给sort的排序策略。
    建议去看tij,chapter11,那里讲的非常清楚