N个 Hashtable 放在Vector 里;现在 Hashtable 中有个key叫"sum" "sum"的值为排序值 现在要求排序排序完成的值 最后还是一个Vector

解决方案 »

  1.   

    将hashtable封装一下,实现Comparable接口,使用Collections.sort()就可以。
      

  2.   

    to cuilichen
    你说将Hashtable 封装一下 如何封状
    排序的值在Hashtable里面
    你给出个例子来谢谢 !
      

  3.   

    class MyHashTable extends Hashtable implements Comparable {
       long sum;
       public int compareTo(Object o) {
    //     return (int)(sum - ((MyHashTable)o).sum);
         return (int)(((MyHashTable)o).sum-sum); // reverse order
      }
       public Object put(Object key, Object value) {
         Object previous = null;
         try{
           sum += Long.parseLong((String)value);
           previous = super.put(key,value);
         }catch(Exception e){e.printStackTrace();}
         return previous;
       }
       // overrite remove also
       public static void main(String[] args) {
         Vector v = new Vector();
         MyHashTable a = new MyHashTable();
         a.put("0","1");
         MyHashTable b = new MyHashTable();
         b.put("0","2");
         MyHashTable c = new MyHashTable();
         c.put("0","3");
         v.add(c);
         v.add(b);
         v.add(a);
         Collections.sort(v);
         // you can choose not to implement Comparable interface and use the next sort().
         // 将implements Comparable去掉,用下面的sort()也行.
         Collections.sort(v, new Comparator() {
           public int compare(Object o1, Object o2) {
             return (int) ( ( (MyHashTable) o1).sum - ( (MyHashTable) o2).sum);
           }
         });
         for(int i = 0; i < v.size(); ++i){
           MyHashTable t = (MyHashTable)v.elementAt(i);
           System.out.println(t.get("0"));
         }
       }
     }
      

  4.   

    如果Hashtable里面还有其它的key呢?
    小生觉得
    楼上的哥哥的做法足以解决问题,但不够“美观”
      

  5.   

    package com.piao.cuilichen;import java.util.*;public class MyHashTable extends Hashtable implements Comparable {
        public int sum = 0;    public int compareTo(Object o) {
            MyHashTable o2 = (MyHashTable) o;
            if (sum > o2.sum) {
                return 1;
            } else if (sum < o2.sum) {
                return -1;
            } else {
                return 0;
            }
        }    public static void main(String[] args) {//测试一下
            Vector v = new Vector();
            MyHashTable[] mh = new MyHashTable[4];
            System.out.println("init:");
            for (int i = 0; i < mh.length; i++) {
                mh[i] = new MyHashTable();
                mh[i].put("sum", new Integer(i));
                mh[i].sum=((Integer)mh[i].get("sum")).intValue();
                System.out.println("hashtable "+i+" sum = "+mh[i].sum+"  " );
            }
            v.add(mh[0]);
            v.add(mh[2]);
            v.add(mh[3]);
            v.add(mh[1]);
            System.out.println("before sort:");
            for (int i = 0; i < v.size(); i++) {
                MyHashTable mhash=(MyHashTable)v.elementAt(i);
                System.out.print(mhash.sum+"  ");
            }
            Collections.sort(v);
            System.out.println("\nafter sort:");
            for (int i = 0; i < v.size(); i++) {
                MyHashTable mhash=(MyHashTable)v.elementAt(i);
                System.out.print(mhash.sum+"  ");
            }
        }}测试的输出:
    init:hashtable 0 sum = 0  hashtable 1 sum = 1  hashtable 2 sum = 2  hashtable 3 sum = 3  before sort:0  2  3  1  
    after sort:0  1  2  3