class M{
private Vector list = null;
private int order;public Vector getList() {
return list;
}public void setList(Vector list) {
this.list = list;
}
public int getOrder() {
return order;
}public void setOrder(int order) {
this.order = order;
}
}有一个Vector ht,里面放类M的实例M1...Mj...Mn,其中 Mj.getList返回的是一个Vector,里面放的也是M1...Mi...Mm.
现在想实现  ht 中对象M 按order 升序排序,包括Mj.getList返回的Vector中的M也是升序排.

解决方案 »

  1.   

    关注一哈
    前段时间看到一个对list中的实体bean某个字段的排序方法,因为用不到,就忘了,惭愧惭愧
      

  2.   

    TreeMap个人觉得这个很适合做这个,呵呵.
      

  3.   

    用实现Comparable来做,我先写写看
      

  4.   

    import java.util.Vector;
    /**
     * <p>Title: </p>
     * <p>Description: </p>
     * <p>Copyright: Copyright (c) 2006</p>
     * <p>Company: </p>
     * @author not attributable
     * @version 1.0
     */public class CompareClass implements Comparable{
      private Vector list = null;
      private int order;
      
      
      public CompareClass() {
      }
      
      public int compareTo(Object o){
        int result = 0;
        
        if(o instanceof CompareClass){
          CompareClass cc = (CompareClass)o;
          if(this.order > cc.order){
            result = 1;
          }else if(this.order < cc.order){
            result = -1;
          }else if(this.order == cc.order){
            result = 0;
          }
        }
        return result;
      }
      
      public void orderList(){
        Vector tempV = new Vector();
        
        for(int i=0;i<this.list.size();i++){
          int pos = 0;
          for(int j=0;j<this.list.size();j++){
            if(((CompareClass)list.elementAt(pos)).compareTo((CompareClass)list.elementAt(j)) <= 0){
              continue;
            }else{
              pos = j;
              continue;
            }
          }
          tempV.addElement(list.elementAt(pos));
          list.removeElementAt(pos);
        }
        setList(tempV);
      }
      
      public Vector getList() {
        return list;
      }
      public void setList(Vector list) {
        this.list = list;
      }
      public int getOrder() {
        return order;
      }
      public void setOrder(int order) {
        this.order = order;
      }
      
    }
    写的不好,忽略了Exception的情况
      

  5.   

    public Vector getList() {
        orderList();
        return list;
      }这个里面加上orderList();
      

  6.   


    public Vector getList() {
    orderList();
    return list;
    }这个里面加上orderList();
    ????
      

  7.   

    package logic;import java.util.TreeMap;
    import java.util.Vector;public class Test { public Test() {
    M m1 = new M();
    m1.order = 1;
    M m2 = new M();
    m2.order = 2;
    // ...... TreeMap tm = new TreeMap();
    tm.put(String.valueOf(m1.order), m1);
    tm.put(String.valueOf(m2.order), m2);
    // ...... int s = tm.size();
    for (int i = 0; i < s; i++) {
    String key = (String) tm.firstKey();
    M m = (M)tm.get(key);
    // ......取出排序后的M,处理 tm.remove(key);
    }
    } public class M {
    private Vector list = null; private int order; public Vector getList() {
    return list;
    } public void setList(Vector list) {
    this.list = list;
    } public int getOrder() {
    return order;
    } public void setOrder(int order) {
    this.order = order;
    }
    }}
      

  8.   

    排序在Test的构造函数里面,随便写的.主要是这段:TreeMap tm = new TreeMap();
    tm.put(String.valueOf(m1.order), m1);
    tm.put(String.valueOf(m2.order), m2);
    // ...... int s = tm.size();
    for (int i = 0; i < s; i++) {
    String key = (String) tm.firstKey();
    M m = (M)tm.get(key);
    // ......取出排序后的M,处理 tm.remove(key);
    }
      

  9.   

    这个都遍历到了多有节点吗/? 它像树型结构一样这个是只对本层的排序,对于下层的LIST你在调用getList()方法时才排序
    看你自己的情况了,如果你要一次排序完,那么重载orderList(CompareClass c)
      

  10.   

    ((CompareClass)list.elementAt(pos)).orderList();
          tempV.addElement(list.elementAt(pos));
          list.removeElementAt(pos);
      

  11.   

    可能大家没有理解这个题目的意思,
    Vector ht 
           M1--->getlist Vector ht2 含有M1.... 
           M2                           Mn ....
           M3                           
           .
           .
           Mn--->
      

  12.   

    public void sort(Vector ver) {
      for (Iterator iter = ver.iterator(); iter.hasNext();) {
        M m = (M) iter.next();
        if (m.getList() != null) {
          Collections.sort(m.getList(), new Comparator() {
            public int compare(Object o1, Object o2) {
              M m1 = (M) o1;
              M m2 = (M) o2;
              return m1.getOrder() - m2.getOrder();
            }
          });
          sort(m.getList());
        }
      }
      Collections.sort(ver, new Comparator() {
        public int compare(Object o1, Object o2) {
          M m1 = (M) o1;
          M m2 = (M) o2;
          return m1.getOrder() - m2.getOrder();
        }
      });
    }
      

  13.   

    好多人,都只解决了m.getList的哪层排序,那么 (m.getList).get(i).getList......排序问题呢.
      

  14.   

    好多人,都只解决了m.getList的哪层排序,那么 (m.getList).get(i).getList......排序问题呢.
    ------------------------------------------------------------------
    递归一下不是都解决了嘛,代码还有什么问题
      

  15.   

    public void recursiveSort(List list, int order) {
            if (list == null || list.size() == 0) {
                return;
            }
            sortList(list, order);
            for (Object o : list) {
                if (o != null && o instanceof List) {
                    List subList = (List) o;
                    recursiveSort(subList, order);
                }
            }
        }    public void sortList(List list, int order) {
            //to be implemented
        }
      

  16.   

    public void sort(Vector ver) {
      for (Iterator iter = ver.iterator(); iter.hasNext();) {
        M m = (M) iter.next();
        if (m.getList() != null) {
          Collections.sort(m.getList(), new Comparator() {
            public int compare(Object o1, Object o2) {
              M m1 = (M) o1;
              M m2 = (M) o2;
              return m1.getOrder() - m2.getOrder();
            }
          });
          sort(m.getList());
        }
      }
      Collections.sort(ver, new Comparator() {
        public int compare(Object o1, Object o2) {
          M m1 = (M) o1;
          M m2 = (M) o2;
          return m1.getOrder() - m2.getOrder();
        }
      });
    }
    ---------------------------------
    递归排序,还有什么问题
      

  17.   

    public void sort(Vector ver) {
      for (Iterator iter = ver.iterator(); iter.hasNext();) {
        M m = (M) iter.next();
        if (m.getList() != null) {
          Collections.sort(m.getList(), new Comparator() {
            public int compare(Object o1, Object o2) {
              M m1 = (M) o1;
              M m2 = (M) o2;
              return m1.getOrder() - m2.getOrder();
            }
          });
          sort(m.getList());
        }
      }
      Collections.sort(ver, new Comparator() {
        public int compare(Object o1, Object o2) {
          M m1 = (M) o1;
          M m2 = (M) o2;
          return m1.getOrder() - m2.getOrder();
        }
      });
    }
    ---------------------------------
    递归排序,还有什么问题public void sort(Vector ver) 返回值是个void,要返回一个排序后的Vector.
      

  18.   

    为什么要设个返回值呢?Vertor是引用传递,sort(Vector ver) 之后取出来的ver就是排过序的
    Vector。
    测试:
    public static void main(String args[]) {
      Vector ver1 = new Vector();
      Vector ver2 = new Vector();
      Vector ver3 = new Vector();
      
      M m41 = new M();
      m41.setOrder(4);
      M m42 = new M();
      m42.setOrder(3);
      M m43 = new M();
      m43.setOrder(2);
      M m44 = new M();
      m44.setOrder(1);
      ver3.add(m41);
      ver3.add(m42);
      ver3.add(m43);
      ver3.add(m44);
      
      M m31 = new M();
      m31.setOrder(2);
      m31.setList(ver3);
      ver2.add(m31);
      
      M m32 = new M();
      m32.setOrder(1);
      m32.setList(new Vector(ver3));
      ver2.add(m32);
      
      M m21 = new M();
      m21.setOrder(2);
      m21.setList(ver2);
      ver1.add(m21);
      M m22 = new M();
      m22.setOrder(1);
      m22.setList(new Vector(ver2));
      ver1.add(m22);  
      sort(ver1);
      System.out.println(printStr(ver1));  
      
    }
    public static String printStr(Vector ver) {
      String str = "";
      for (Iterator iter = ver.iterator(); iter.hasNext();) {
        M m = (M) iter.next();
        if (m.getList() != null) {
          str = str +":"+m.getOrder()+ "->["+printStr(m.getList())+"]";
        }
        if(m.getList()==null){
          str = str +":"+m.getOrder();
        }
      }
      return str;
    }
    public static void sort(Vector ver) {
      for (Iterator iter = ver.iterator(); iter.hasNext();) {
        M m = (M) iter.next();
        if (m.getList() != null) {
          Collections.sort(m.getList(), new Comparator() {
            public int compare(Object o1, Object o2) {
              M m1 = (M) o1;
              M m2 = (M) o2;
              return m1.getOrder() - m2.getOrder();
            }
          });
          sort(m.getList());
        }
      }
      Collections.sort(ver, new Comparator() {
        public int compare(Object o1, Object o2) {
          M m1 = (M) o1;
          M m2 = (M) o2;
          return m1.getOrder() - m2.getOrder();
        }
      });
    }