`

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

 
阅读更多


Collection是接口,Collections是类,这是二者最明显的区别

Collections提供了一 些static方法来对 Collection对象进行处理,比如:对Collection对象的复制、添加元素、修改元素、对元素进行排序、交换俩个元素的位置、取 Collection的子集等等操作。另外Collection是j2sdk中集合框架的根接口,所有的其他特殊类型的结合接口或者类都直接或间接的实现 了这个接口。

说到这,就不得不提一提Array和Arrays了。他们的区别和Collection/Collections一样。我就不多说了,这个东西不是哪有的,而是我积累的,在这里给大家提个醒,知道有这么回事就行了。

而Comparator 和Comparable都是接口,俩者之间可以说没什么关系。

Comparator位于包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文档,说的很清楚。


====================================================


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(lnew SomeComparator());
}
对于下面的也通用:

Arrays.{binarySearch(), sort()}, Collections.{binarySearch(), max(), min(), sort()},


2. Collections
是JAVA中一个实用类,用来对Collection,ArrayList,Set等进行基本的操作,封装了常用的方法,都是静态的,可以直接调用。
Collection是一个interface,他是JAVA中所有Collection Framework里的根节点,其他集合类都要继承他。看API有说明。


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics