java中Comparable接口

java中Comparable接口

所有可以排序的类,都实现了java.lang.Comparable接口。

Comparable中只有一个方法:

int conpareTo(T o)

返回0,表示this == obj

返回正数,表示this > obj

返回负数,表示this < obj

BasicContainer2.java

import java.util.*;

public class BasicContainer2 {
    public static void main(String[] args) {
		List l1 = new LinkedList();
		l1.add(new Name("Karl","M"));
		l1.add(new Name("Steven","Lee"));
		l1.add(new Name("John","O"));
		l1.add(new Name("Tom","M"));
		System.out.println(l1);//[Karl M, Steven Lee, John O, Tom M]
		
		//调用sort方法排序
		//排序之前必须重写compaerTo比较大小,否则无效
		Collections.sort(l1);
		System.out.println(l1);//[Steven Lee, Karl M, Tom M, John O]
		
    }
}

//实现Comparable接口
class Name implements Comparable {
    private String firstName,lastName;
    public Name(String firstName, String lastName) {
        this.firstName = firstName; this.lastName = lastName;
    }
    public String getFirstName() {  return firstName;   }
    public String getLastName() {   return lastName;   }
    public String toString() {  return firstName + " " + lastName;  }
    
    public boolean equals(Object obj) {
	    if (obj instanceof Name) {
	        Name name = (Name) obj;
	        return (firstName.equals(name.firstName))
	            && (lastName.equals(name.lastName));
	    }
	    return super.equals(obj);
		}
		
	public int hashCode() {
		return firstName.hashCode();
	}
		
	//改写Comparable的compareTo方法	
	public int compareTo(Object o) {
		Name n = (Name)o;
		//调用String类的compareTo方法,比较大小
		int lastCmp = lastName.compareTo(n.lastName);
		//lastCmp,首先按照姓(lastName)排列,然后按照名(fisrtName)排列
		return (lastCmp!=0 ? lastCmp : firstName.compareTo(n.firstName));
	}
		
}
F:\java>javac BasicContainer2.java
注: BasicContainer2.java使用了未经检查或不安全的操作。
注: 有关详细信息, 请使用 -Xlint:unchecked 重新编译。

F:\java>java BasicContainer2
[Karl M, Steven Lee, John O, Tom M]
[Steven Lee, Karl M, Tom M, John O]

F:\java>

猜你喜欢

转载自mfcfine.iteye.com/blog/2384628