方式1:
写一个类,实现Comparator接口,覆盖public int compare(Object obj1, Object obj2),将该类对象作为参数传递给TreeSet集合的构造器。
import java.util.Comparator;
import java.util.Iterator;import java.util.TreeSet;
public class TreeSetTest implements Comparator {
public int compare(Object obj1,Object obj2)
{
String str1=(String)obj1;
String str2=(String)obj2;
int temp=str1.length()-str2.length();
return temp==0?str1.compareTo(str2):temp; //compareTo是String类对象的方法。
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeSet ts=new TreeSet(new TreeSetTest());
ts.add("fadf");
ts.add("afaffd");
ts.add("aaxc");
Iterator it=ts.iterator();
while(it.hasNext())
{
System.out.println(it.next());
}
}
}
方式二:对元素进行排序,也可以让元素自身实现Comparable 接口,覆盖public int compareTo(Object o) 。如果对象不具备自然排序,就要让集合具备比较功能。
package maptest4;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
class Person implements Comparable
{
private String name;
@Override
public int compareTo(Object o) {
// TODO Auto-generated method stub
Person p=(Person)o;
int temp=this.getName().compareTo(p.getName());
return temp==0?this.getAge()-p.getAge():temp;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
private int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
}
public class TreeMapTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeMap tm=new TreeMap();
tm.put(new Person("sada",21), "beijign");
tm.put(new Person("lilin",26), "tianjin");
tm.put(new Person("agou",45), "ali");
tm.put(new Person("cc",21), "beijing");
Set <Map.Entry<Person,String>> set=tm.entrySet();
Iterator<Map.Entry<Person,String>> it=set.iterator();
while(it.hasNext())
{
Map.Entry<Person,String> m=it.next();
Person p=m.getKey();
String value=m.getValue();
System.out.println(p.getName()+":"+p.getAge()+"..."+m.getValue());
}
}
}