我网上差了半天,都是有add的过程,add时候就对该set进行排序了。 
我想知道,如果我这个set已经添加完了,我直接取到的是个无序的set集合,怎么对该set进行排序。 
谢谢~~~~~
http://topic.csdn.net/t/20050428/13/3973303.html 
他这个方法在我这里好像执行不行,不知道是什么原因?

解决方案 »

  1.   

    你先判断你的Set是否是一个TreeSet,如果是,那么它就是有序的,无需排序;如果不是,就建一个新的TreeSet,再用TreeSet的addAll()方法把原始Set中的元素全部加入到新的TreeSet中,新的TreeSet中的内容就是有序的了。
      

  2.   

    可以用TreeSet类,都不需你排序,插入的时候自动排好序,例如: 
    public class SetSort { /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    Set<String> aa = new TreeSet<String>(); 
    aa.add("b"); 
    aa.add("a"); 
    aa.add("d"); 
    System.out.println(aa);//结果是[a, b, d] 
    } } 首先说一下他里面的错误, 
    要用new TreeSet(new Comparator()) 的方式来实例化一个set的话,这个接口必须要实现的方法是compare而不是compareTo。 
    其它的正常,下面是我用他的方法的一个实验,你可以看一下。 
    public class User { private String aa; /** 
    * @return the aa 
    */ 
    public String getAa() { 
    return aa; 
    } /** 
    * @param aa the aa to set 
    */ 
    public void setAa(String aa) { 
    this.aa = aa; 
    } } public class asdf { /** 
    * @param args 
    */ 
    public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    User user1 = new User(); 
    User user2 = new User(); 
    User user3 = new User(); 
    user1.setAa("11"); 
    user2.setAa("22"); 
    user3.setAa("88"); Set set = new TreeSet(new Comparator() { 
    public int compare(Object o1, Object o2) {//compare方法不是compareTo 
    // 在这里来比较o1和o2,它们的类型就是你的类了,如: 
    User u1 = (User) o1; 
    User u2 = (User) o2; 
    return u1.getAa().compareTo(u2.getAa()); 

    }); set.add(user2);//22 
    set.add(user3);//88 
    set.add(user1);//11 Iterator it=set.iterator();//一个迭代器,用来证明已经排序了,和add的顺序不同 
    while(it.hasNext()){ 
    User ss=(User)it.next(); 
    System.out.println(ss.getAa());//结果为11 22 88 
    } } } 
      

  3.   

    用TreeSet吧,他是有序不可重复的。如果传的是自己写的类,记得要从写compareTo()方法或者是比较器comparator。