当前位置: 代码迷 >> J2SE >> hashtable怎么排序
  详细解决方案

hashtable怎么排序

热度:214   发布时间:2016-04-24 13:25:17.0
hashtable如何排序
下面的是个vector集合中的一个hashtable元素,顺序是乱的,如何按照可以key排序,并且直接显示value
{33=Email地址, 32=扣税序号, 31=实发数, 30=扣无薪假, 19=一般加班, 18=工会费, 17=补扣公积, 16=补扣失保, 15=补扣医疗, 14=补扣养老, 13=扣公积, 12=扣失保, 11=扣医疗, 10=扣养老, 9=月奖金, 29=扣探亲假, 8=独生子女, 28=扣事假, 7=基本工资, 27=扣病假, 6=部门, 26=个调税, 5=工号, 25=其它扣2, 4=姓名, 24=其它扣1, 23=补贴2, 22=补贴1, 21=节日加班, 20=周末加班}

------解决方案--------------------
Hash表是散列存储的,要想排序存储,那是不可能的啦,
所以,楼主可以试试两种思路,
思路一:在使用数据的时候,先将HashTable中的元素取出来放到别的集合里面,然后按key排序,之后在使用。
思路二:不使用HashTable,换成TreeMap,这样,可以实现排序存储,使用也就方便了,但是,TreeMap不是现成安全的。所以,楼主为了能够现成安全的操纵数据,还要看看JDK中Collections.synchronizedMap方法,以及未解决的一些问题。这样就可以实现,既是现成安全,又是排序存储了。
当然,楼主也可以依照TreeMap自己封装一个线程安全的Map类,可以排序存储。
------解决方案--------------------
基于思路一:给楼主推荐一个方法,呵呵。
HashTable table = new HashTable();// 假设这就是已知的HashTable
Object [] array = table.keySet().toArray();
Arrays.sort(array);
//现在,array就是已经排好序的key数组了,如果楼主想要不同的排列顺序,可以调用sort(Object[] a, Comparator c) 方法,写一个实现Comparator接口的类就OK了。
//遍历HashTable
for(int i=0;i<array.length;i++){
Object key = array[i];
Object value = table.get(key);
//这里的遍历,是按排序后的顺序的。
}
------解决方案--------------------
这是偶试验的一个例子 不知道是否可以满足你的要求
Java code
import java.util.*; public class Jz{     public static void main(String args[])     {             Hashtable<String,String> tableX=new Hashtable<String,String>();      tableX.put("33","Email地址");      tableX.put("27","扣病假");      tableX.put("30","扣无薪假");      TreeMap<String,String> tree=new TreeMap<String,String>(tableX);      System.out.print(tree);      } }
  相关解决方案