JavaSE—Comparator接口(推荐使用),javasecomparator
分享于 点击 9198 次 点评:82
JavaSE—Comparator接口(推荐使用),javasecomparator
一、Comparator接口与Comparable接口的不同
Comparator位于包java.util下,而Comparable位于包java.lang下。
Comparable接口将比较代码嵌入需要进行比较的类的自身代码中,而Comparator接口在一个独立的类中实现比较。
如果前期类的设计没有考虑到类的Compare问题而没有实现Comparable接口,后期可以通过Comparator接口来实现比较算法进行排序,并且为了使用不同的排序标准做准备,比如:升序、降序。
Comparable接口强制进行自然排序,而Comparator接口不强制进行自然排序,可以指定排序顺序。
二、使用Comparator接口的步骤
1、创建一个单独的类,实现Comparator接口,重写compare方法,以此类作为比较器:
public class FruitsCompare implements Comparator<Fruits>{
@Override
public int compare(Fruits o1, Fruits o2) {
if(o1.getId()>o2.getId()) {
return -1;
}else if(o1.getId()<o2.getId()) {
return 1;
}else {
return 0;
}
}
}
2、用比较器类来实例化一个对象,此对象即为比较器:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
public class Fruits{
private int id;
private String name;
private String color;
public Fruits(int id, String name, String color) {
super();
this.id = id;
this.name = name;
this.color = color;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getColor() {
return color;
}
public void setColor(String color) {
this.color = color;
}
@Override
public String toString() {
return "Fruits [id=" + id + ", name=" + name + ", color=" + color + "]";
}
public static void main(String[] args) {
List<Fruits> list=new ArrayList<>();
list.add(new Fruits(2,"pear", "yellow"));
list.add(new Fruits(4,"watermelon", "green"));
list.add(new Fruits(1,"cherry", "red"));
list.add(new Fruits(3,"apple", "red"));
//此处创建一个比较器
FruitsCompare fc=new FruitsCompare();
Collections.sort(list,fc);
Iterator<Fruits> it = list.iterator();
while(it.hasNext()) {
System.out.println(it.next());
}
}
}
三、Comparable接口和Comparator
1、两个接口都是泛型接口;
2、前者需要在需要比较的类中内嵌代码,并且之后不容易改动;
后者是独立与要比较的类,并且能根据使用情形,为同一个类设计多个不同情况下使用的比较器,同时也可以灵活的控制升降排序方式,较为灵活,加入在设计类时没有考虑到compare的问题,那么在后期进行改动的时候,使用Comparator接口无疑是最好的选择。
相关文章
- 暂无相关文章
用户点评