ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码

java comparator和comparable(2/3)

来源:网络整理     时间:2016-02-24     关键词:

本篇文章主要介绍了"java comparator和comparable",主要涉及到方面的内容,对于Javajrs看球网直播吧_低调看直播体育app软件下载_低调看体育直播感兴趣的同学可以参考一下: 有两种方式可以进行集合排序 :集合中对象的所属类实现了 java.lang.Comparable 接口为集合指定比较器 java.lang.Comparator...

我们如果需要控制某个类的次序,而该类本身不支持排序(即没有实现Comparable接口);那么可以建立一个该类的比较器来排序,这个比较器只需要实现Comparator接口即可。
namely, 通过实现Comparator类来新建一个比较器,然后通过该比较器来对类进行排序。Comparator 接口其实就是一种策略模式的实践

接口作用?
1.如果一个类已经开放完成,但是在此类建立的初期并没有实现 Comparable 接口,此时肯定是无法进行对象排序操作的,所以为了解决这一的问题,java 又定义了另一个比较器的操作接口 Comparator 此接口定义在 java.util 包中
2. 为了使用不同的排序标准做准备,比如升序,降序或者其他什么序列

如何定义?
接口仅仅包括两个函数

package java.util;

publicinterfaceComparator<T> {
    intcompare(T o1, T o2);
    booleanequals(Object obj);
 }
  1. 若一个类要实现Comparator接口:它一定要实现compare(T o1, T o2)函数,但是可以不实现equals函数。
    为什么可以不实现 equals(Object obj) 函数呢? 因为任何类,默认都是已经实现了 equals(Object obj) 的。 Java 中的一切类都是继承于 java.lang.Object,在 Object.java 中实现了 equals(Object obj) 函数;所以,其它所有的类也相当于都实现了该函数。

  2. int compare(T o1, T o2) 是 “比较 o1 和 o2 的大小”。返回 “负数”,意味着 “o1 比 o2 小”;返回 “零”,意味着 “o1 等于 o2”;返回 “正数”,意味着 “o1 大于 o2”。

举个例子,Student例子已经写完,但是想根据age进行排序

Student stu[] = {
                  new Student("张三" ,23),
                  new Student("李四" ,26)
                  , new Student("王五" ,22)}; 
Arrays. sort(stu,new MyComparator());   

List list = new ArrayList(); 
list.add( new Student("zhangsan" ,31)); 
list.add( new Student("lisi" ,30)); 
list.add( new Student("wangwu" ,35)); 
Collections. sort(list,new MyComparator());

3.Comparable 和 Comparator比较

相关图片

相关文章