to cuilichen 你说将Hashtable 封装一下 如何封状 排序的值在Hashtable里面 你给出个例子来谢谢 !
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")); } } }
你说将Hashtable 封装一下 如何封状
排序的值在Hashtable里面
你给出个例子来谢谢 !
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"));
}
}
}
小生觉得
楼上的哥哥的做法足以解决问题,但不够“美观”
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