重写 compareTo方法如下:
public int compareTo(Object o) {
Name n = (Name) o;
int lastCmp =
secondName.compareTo(n.secondName);
return
(lastCmp!=0 ? lastCmp:firstName.compareTo(n.firstName));
}
完整代码如下
import java.util.List;
import java.util.LinkedList;
import java.util.Collections;
public class Test {
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);
Collections.sort(l1);
System.out.println(l1);
/*
Set s = new HashSet();
s.add("hello");
s.add("world");
s.add(new Name("f1","11"));
s.add(new Integer(100));
*/
/*
s.add("hello");
s.add("hello");
*/
//Set
/*
Set s1 = new HashSet();
Set s2 = new HashSet();
s1.add("a");s1.add("b");s1.add("c");
s2.add("d");s2.add("a");s2.add("b");
Set sn = new HashSet(s1);
sn.retainAll(s2);
Set su = new HashSet(s1);
su.addAll(s2);
System.out.println(sn);
System.out.println(su);
*/
/*
Collection c = new HashSet();
c.add("hello");
c.add(new Name("f1","11"));
c.add(new Name("f2","12"));
c.add(new Name("f3","13"));
c.add(new Integer(100));
c.remove("hello");
c.remove(new Integer(100));
Iterator i = c.iterator();
while(i.hasNext()) {
Name n = (Name)i.next();
System.out.print(n.getfirstName()+" ");
}*/
/*System.out.println(c.remove(new Name("f1","11")));
System.out.println(c);*/
}
}
class Name implements Comparable {
private String firstName,secondName;
public Name(String firstName,String secondName) {
this.firstName = firstName;
this.secondName = secondName;
}
public String getfirstName() {return firstName;}
public String getsecondName() {return secondName;}
public String toString() {
return firstName+" "+secondName;
}
public boolean equals(Object obj) {
if(obj instanceof Name) {
Name name = (Name) obj;
return (firstName.equals(name.firstName))&&(secondName.equals(name.secondName));
}
return super.equals(obj);
}
public int hashCode() {
return firstName.hashCode();
}
public int compareTo(Object o) {
Name n = (Name) o;
int lastCmp =
secondName.compareTo(n.secondName);
return
(lastCmp!=0 ? lastCmp:firstName.compareTo(n.firstName));
}
}