java中Comparable的例子和用法
Comparable的用法
馬克- to-win:馬克 java社區(qū):防盜版實(shí)名手機(jī)尾號(hào): 73203。
馬克-to-win:前面講過(guò)進(jìn)入TreeSet的每個(gè)元素是都排了序的,如果被添加的元素是我們自己定義的,就需要告訴TreeSet排序的規(guī)則,這個(gè)規(guī)則就要在Comparable中定義。在下面的例子中,當(dāng)我們要往TreeSet中添加我們自己定義的類(lèi)Worker對(duì)象時(shí),就在compareTo中定義排序規(guī)則。
例:3.5.1
/*why in the past never implements Comparable? becasue Integer claas and
String class both implements this Comparable.
java.lang.Object
java.lang.String
All Implemented Interfaces:
CharSequence, Comparable, Serializable
*/
import java.util.*;
//Comparable接口在java.lang包中定義
//定義的方法:
//int compareTo(Object o);
//實(shí)現(xiàn)該接口就可以實(shí)現(xiàn)按用戶(hù)定義的自然順序排列對(duì)象。
/*you must implements Comparable,otherwise, when you add the second element into
the treeset, it will report error, because it will search for Comparable
interface. */
class Worker implements Comparable {
int workNum;
String name;
int money;
public Worker(int workNum, String name, int money) {
this.workNum = workNum;
this.name = name;
this.money = money;
}
// 按工資排序
/*
* public int compareTo(Object o) Returns: a negative integer, zero, or a
* positive integer as this object is less than, equal to, or greater than
* the specified object. it looks like that the one that is in front is
* small. what if two keys are the same? only print out one item.
*/
public int compareTo(Object o) {
Worker e = (Worker) o;
return money - e.money;//到底誰(shuí)減誰(shuí),講師如想搞清楚,請(qǐng)聽(tīng)配套視頻里的仔細(xì)分析。
// return workNum - e.workNum;
}
}
public class TestMark_to_win {
public static void main(String[] args) {
Worker e1 = new Worker(1, "李1", 5500);
Worker e2 = new Worker(2, "李2", 6600);
Worker e3 = new Worker(3, "李2", 4200);
Worker e4 = new Worker(4, "李4", 2000);
Collection c = new TreeSet();
/* but a TreeSet instance performs all key comparisons using its
compareTo (or compare) method, */
c.add(e1);
c.add(e2);
c.add(e3);
c.add(e4);
Iterator i = c.iterator();
while (i.hasNext()) {
Worker e = (Worker) i.next();
System.out.println(e.workNum + " " + e.name + " " + e.money);
}
}
}
結(jié)果:
4 李4 2000
3 李2 4200
1 李1 5500
2 李2 6600