Comparator and Comparable 及Collections and Collection 的区别及联系?

来源:互联网 发布:未来教育二级c语言 编辑:程序博客网 时间:2024/05/17 05:19

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 (Objectobj),所以你可以通过实现这个接口来是定义你所有需要的比较器,如比较俩个人的大小,对象人有姓名、性别、年龄等属性,你在定义这个比较器的时候就可以在compare方法中对传入的俩个参数(person1,person2)的年龄进行大小的比较,从而确定这俩个人的大小。
而Comparable接口是你要是定义的类要实现的一个接口(如果这个类的实例需要和同一类的别的实例比较大小,而这个大小关系你希望是你自己定义的),它只提供了 int compareTo(T o)方法,也就是说假如我定义了一个Person类,这个类实现了Comparable接口,那么当我实例化Person类的person1后,我想比较person1和一个现有的Person对象person2的大小时,我就可以这样来调用:person1.comparTo(person2),通过返回值就可以判断了;而此时如果你定义了一个PersonComparator(实现了Comparator接口)的话,那你就可以这样:PersonComparatorcomparator= newPersonComparator();comparator.compare(person1,person2);。


详细的说明看看sun的java API文档,说的很清楚。


=======


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);


另一个Comparator

public 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有说明。