解决方案 »

  1.   

    在add的时候就使用比较器插入到正确的位置
      

  2.   

    add的时候会调用compare方法,可以看看jdk源码
      

  3.   


    package temp;import java.util.Comparator;
    import java.util.Iterator;
    import java.util.TreeSet;
    public class MainClass {
    public static void main(String[] args) throws Exception {
    TreeSet set=new TreeSet(new MyComparator());
    set.add("aw");
    set.add("dsui");
    set.add("ewib");
    set.add("9320");
    set.add("aw");
    set.add("dsui");
    for(Iterator it=set.iterator();it.hasNext();){
    System.out.println(it.next());
    }
    }
    }//创建一个比较器
    class MyComparator implements Comparator{ @Override
    public int compare(Object o1, Object o2) {
    //先按照字符串的长度进行比较,如果长度相同,再按照字符串的字典顺序进行比较
    if(o1==null||o2==null){
    throw new NullPointerException("对不起,请传两个对象");
    }
    //如果不为空,则判断是不是String对象
    if(!(o1 instanceof String) || !(o2 instanceof String)){
    throw new ClassCastException("类型错误");
    }
    String s1=(String)o1;
    String s2=(String)o2;
    int temp=s1.length()-s2.length();

    System.out.println("MyComparator "+o1.toString()+"  "+o2.toString());
    return temp==0?s1.compareTo(s2):temp;
    }

    }调用了呀,结果也是按照长度排序的