vinthony / vinthony.github.io

all about myself.
8 stars 1 forks source link

Comparator and Comparable in Java #15

Open vinthony opened 9 years ago

vinthony commented 9 years ago

algs4assignment 3中遇到了java ComparatorComparable的问题: 现总结如下:

Comparable

一个实现了comparable接口的对象的实例可以被用于和相同对象的不同实例做对比。它本身必须实现java.lang.Comparable的接口,这样它就拥有了对比的能力

public class Item implements Comparable<Item> {
          @override
          public int compareTo(Item i){
             // less 返回值小于0
             // equal 返回值等于0
             // great 返回值大于0 
         }
}

使用时:
Item i1 = new Item("xxx");
Item i2 = new Item("yyy");
i1.compareTo(i2);

Comparator

一个实现了comparator接口的对象能够对比不同的对象。它不能用于同一个类的不同实例的对比,但是可以用于其他的类的实例做对比。它必须实现java.util.Comparator的接口。 定义一个可排序的字段,可以用它来对于对象进行其他方式的排序。

public class SortByName implements Comparator<Item>{
         public int compare(Item i1,Item i2){
              //进行操作      
         } 
}

//使用时:
Collections.sort(list,new SortByName());
//或者自定义使用时:在sort内部比较时,使用comparator.compare()