public boolean equals(Object o) { Person p = (Person)o; return name.equals(p.getName()) && sex==p.getSex() && age==p.getAge(); } public int hashCode() { return super.hashCode()+age; }
public String toString() { return "[sex=" + sex + ", age=" + age + ", name=" + name + "]"; } }public class Test {
意思应该是对这个三个字段进行综合降序, 你可以重写Person对象的equals方法把这三个字段都加进去,然后用Person的compare方法比较对象实现降序(怎么降序就不用说了吧)
import java.util.LinkedList;
import java.util.List;class Person implements Comparable { private String name;
private char sex;
private int age;
public Person(String name, char sex, int age) {
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName() {
return name;
}
public char getSex() {
return sex;
}
public int getAge() {
return age;
}
//M代表男性,排在前,F代表女性,拍后
public int compareTo(Object o) {
Person p = (Person)o;
if(getSex()=='M' && p.getSex()=='F')
return 1;
else if(getSex()=='F' && p.getSex()=='M')
return -1;
else {
if(getAge() > p.getAge())
return 1;
else if(getAge() < p.getAge())
return -1;
else {
return getName().compareTo(p.getName());
}
}
}
public boolean equals(Object o) {
Person p = (Person)o;
return name.equals(p.getName()) && sex==p.getSex() && age==p.getAge();
} public int hashCode() {
return super.hashCode()+age;
}
public String toString() {
return "[sex=" + sex + ", age=" + age + ", name=" + name + "]";
}
}public class Test {
public static void main(String[] args) {
List<Person> persons = new LinkedList<Person>();
persons.add(new Person("zhangsan1", 'M', 29));
persons.add(new Person("zhangsan2", 'M', 23));
persons.add(new Person("lisi1", 'M', 6));
persons.add(new Person("lisi2", 'F', 25));
persons.add(new Person("wangwu1", 'M', 12));
persons.add(new Person("wangwu2", 'F', 29));
persons.add(new Person("wangw3", 'F', 42));
List<Person> candidates = new LinkedList<Person>();
for(Person p : persons) {
if(p.getAge() > 18)
candidates.add(p);
}
Collections.sort(candidates);
Collections.reverse(candidates);
for(Person p : candidates) {
System.out.println(p);
}
}
}