在Java中經(jīng)常會涉及到對象數(shù)組的排序問題,那么就涉及到對象之間的比較問題。本文為大家介紹java比較器的使用。
java比較器的使用
對于一個實現(xiàn)了Comparable接口的對象,該接口只能實現(xiàn)一次。如果在一個集合里面需要使用id排序,而在另外一個集合里需要按名字排序這時就需要在這個集合里面指定比較器。
Comparable 是在集合內(nèi)部定義的方法實現(xiàn)的排序,Comparator 是在集合外部實現(xiàn)的排序所以,如想實現(xiàn)排序,就需要在集合外定義 Comparator 接口的方法或在集合內(nèi)實現(xiàn) Comparable 接口的方法。Comparator位于包java.util下,而Comparable位于包java.lang下
Comparable接口聲明了compareTo(Object o)方法
Comparator 接口聲明了compare(Object o1,Object o2)方法
eg:
第一個樹集是按照對象默認的id排序,第二個樹集由指定的構(gòu)造器按照name 排序
package com.mapbar.util;
import java.util.Comparator;
import java.util.TreeSet;
/**
*
* Class Employee.java
*
* Description
*
* Company mapbar
*
* author Chenll E-mail: Chenll@mapbar.com
*
* Version 1.0
*
* Date 2012-8-28 下午05:20:49
*/
public class Employee implements Comparable《Employee》 {
private int id;
private String name;
public Employee(int id, String name) {
this.id = id;
this.name = name;
}
//重寫equals
public boolean equals(Object o) {
if (o == null) {
return false;
}
if (this == o) {
return true;
}
if (?。╫ instanceof Employee)) {
return false;
}
Employee employee = (Employee) o;
return (this.id == employee.id) && (this.name.equals(employee.name));
}
//重寫hashCode
public int hashCode() {
int result = 17;
result = 37 * result + id;
result = 37 * result + name.hashCode();
return result;
}
//重寫toString
public String toString() {
return “id:” + id + “,name:” + name + “”;
}
public int compareTo(Employee employee) {
// 升序
return this.id - employee.id;
// 降序
// return employee.id - this.id;
}
public String getName() {
return name;
}
public static void main(String[] args) {
// 使用的是實現(xiàn)了Compable 接口對象默認的排序方式,按id升序排序
SortedSet《Employee》 treeSet = new TreeSet《Employee》();
treeSet.add(new Employee(2, “zhang”));
treeSet.add(new Employee(1, “chen”));
treeSet.add(new Employee(3, “wang”));
System.out.println(treeSet.toString());
// 使用比較器,指定其排序方式
SortedSet《Employee》 treeSet2 = new TreeSet《Employee》(
// 函數(shù)對象:既匿名內(nèi)部類的實例,這個瞬時的對象永遠不會被別的對象引用
new Comparator《Employee》() {
public int compare(Employee emp1, Employee emp2) {
String name1 = emp1.getName();
String name2 = emp2.getName();
return name1.compareTo(name2);
}
});
treeSet2.add(new Employee(2, “zhang”));
treeSet2.add(new Employee(1, “chen”));
treeSet2.add(new Employee(3, “wang”));
System.out.println(treeSet2.toString());
}
}
結(jié)果:
[id:1,name:chen, id:2,name:zhang, id:3,name:wang]
[id:1,name:chen, id:3,name:wang, id:2,name:zhang]
評論
查看更多