关于集合可以谈的地方不多,关键是熟练。所以我在Set中给出了两种常见的排序方法,
一种是实现Comparable接口中的compareTo方法,现在给出实现程序
package blog;
public class Person implements Comparable{
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
public int hashCode() {
return name.hashCode()*10+age;
}
public boolean equals(Object obj) {
if(this==obj)return true;
else{
if(this.getClass()==obj.getClass())
{
Person temp=(Person)obj;
if(this.name.equals(temp.getName())&&this.age==temp.getAge())
return true;
else return false;
}
else return false;
}
}
public String toString()
{
return "姓名:"+name+"年龄:"+age;
}
public int compareTo(Object o) {
Person temp=(Person)o;
return this.getAge()-temp.getAge();
}
}
package blog;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class Test {
public static void main(String[] args) {
TreeSet<Person> myset=new TreeSet<Person>();
Person person1=new Person("person1",12);
Person person2=new Person("person2",32);
Person person3=new Person("person1",12);
Person person4=new Person("person4",11);
Person person5=new Person("person5",22);
myset.add(person1);
myset.add(person2);
myset.add(person3);
myset.add(person4);
myset.add(person5);
showme(myset);
}
public static void showme(Set set)
{ Iterator it=set.iterator();
while(it.hasNext())
{
Person temp=(Person)it.next();
System.out.println(temp);
}
}
}
另一种方式是写一个比较器,在构造Set的时候持有该比较器的引用
package blog;
import java.util.*;
public class MyComparator implements Comparator {
public int compare(Object o1, Object o2) {
Person person1=(Person)o1;
Person person2=(Person)o2;
return person1.getAge()-person2.getAge();
}
}
package blog;
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public int getAge() {
return age;
}
public String getName() {
return name;
}
public int hashCode() {
return name.hashCode()*10+age;
}
public boolean equals(Object obj) {
if(this==obj)return true;
else{
if(this.getClass()==obj.getClass())
{
Person temp=(Person)obj;
if(this.name.equals(temp.getName())&&this.age==temp.getAge())
return true;
else return false;
}
else return false;
}
}
public String toString()
{
return "姓名:"+name+"年龄:"+age;
}
}
package blog;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeSet;
public class Test {
public static void main(String[] args) {
TreeSet<Person> myset=new TreeSet<Person>(new MyComparator());
Person person1=new Person("person1",12);
Person person2=new Person("person2",32);
Person person3=new Person("person1",12);
Person person4=new Person("person4",11);
Person person5=new Person("person5",22);
myset.add(person1);
myset.add(person2);
myset.add(person3);
myset.add(person4);
myset.add(person5);
showme(myset);
}
public static void showme(Set set)
{ Iterator it=set.iterator();
while(it.hasNext())
{
Person temp=(Person)it.next();
System.out.println(temp);
}
}
}
以上两种排序一定要熟练掌握!