程序说明:花括号里的内容是<Hashtable<String, String>>对象的内容,每个Hashtable对象都包含两个key(name和age)List<Hashtable<String, String>> data= new ArrayList<Hashtable<String, String>>();
data对象按顺序包含了以下的Hashtable对象
{name=username002, age=14,}
{name=username001, age=16,}
{name=username004, age=20,}
{name=username010, age=11,}
我要实现的是按顺序name或者age排序后,再将排序后的Hashtable对象重新放到data或者别的list对象里
如:如果我按name排序后,data将重新包含以下内容的Hashtable对象:
{name=username001, age=16,}
{name=username002, age=14,}
{name=username004, age=20,}
{name=username010, age=11,}请问怎么实现啊,高手帮帮我啊

解决方案 »

  1.   

    一个方法 ,你用 TreeMap 实现自己排序 规则 然后放list可以了
    TreeMap(Comparator<? super K> c)
              构造一个新的空映射,该映射根据给定的比较器进行排序。
      

  2.   

    首先这种设计是有问题的,应该把name和age封装到一个类(比如叫User)中,再往List中存入User的实例,而不是用Hashtable。当然,如果不能重新设计程序,现有数据也是可以排序的,用Comparator即可。 public static void main(String[] args) {
    List <Hashtable <String, String>> data= new ArrayList <Hashtable <String, String>>();
    Hashtable<String, String> user1 = new Hashtable<String, String>();
    user1.put("name", "username002");
    user1.put("age", "14");
    data.add(user1);
    Hashtable<String, String> user2 = new Hashtable<String, String>();
    user2.put("name", "username001");
    user2.put("age", "16");
    data.add(user2);
    Hashtable<String, String> user3 = new Hashtable<String, String>();
    user3.put("name", "username004");
    user3.put("age", "20");
    data.add(user3);
    Hashtable<String, String> user4 = new Hashtable<String, String>();
    user4.put("name", "username010");
    user4.put("age", "11");
    data.add(user4);


    System.out.println("before sorting...");
    System.out.println(data);

    System.out.println("sort by name:");
    Collections.sort(data, new Comparator < Hashtable <String, String > >() {
    public int compare(Hashtable <String, String> arg0, Hashtable <String, String> arg1) {
    return arg0.get("name").compareTo(arg1.get("name"));
    }
    });
    System.out.println(data); System.out.println("sort by age:");
    Collections.sort(data, new Comparator < Hashtable <String, String > >() {
    public int compare(Hashtable <String, String> arg0, Hashtable <String, String> arg1) {
    return Integer.valueOf(arg0.get("age")).compareTo(Integer.valueOf(arg1.get("age")));
    }
    });
    System.out.println(data);
    }
      

  3.   

    按value值排序import java.util.Hashtable;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Set;public class Test{ List<Hashtable<String,String>> data = new ArrayList<Hashtable<String,String>>(); private static void printlHt(Hashtable hashtable){
    Set set = hashtable.keySet();
    Iterator it = set.iterator();
    while(it.hasNext()){
    String key = it.next().toString();
    System.out.println(key + " -> " + hashtable.get(key).toString());
    }
    } public static void main(String[] args){
    Hashtable<String,String> table = new Hashtable<String,String>();
    table.put("username002","14");
    table.put("username001","16");
    table.put("username004","20");
    table.put("username010","11");
    printlHt(table);
    Map.Entry[] set = getSortedHashtable(table);
    System.out.println("-------------------------------");
    for(int i = 0;i < set.length;i++){
    System.out.print(set[i].getKey().toString()+"-->");
    System.out.println(set[i].getValue().toString());
    }
    } public static Map.Entry[] getSortedHashtable(Hashtable h){
    Set set = h.entrySet();
    Map.Entry[] entries = (Map.Entry[]) set.toArray(new Map.Entry[set.size()]); Arrays.sort(entries,new Comparator() {
    public int compare(Object arg0,Object arg1){
    int key1 = Integer.parseInt(((Map.Entry) arg0).getValue().toString());
    int key2 = Integer.parseInt(((Map.Entry) arg1).getValue().toString());
    return ((Comparable) new Integer(key1)).compareTo(new Integer(key2));
    }
    });
    return entries;
    }
    }
      

  4.   

    谢谢大家的帮忙,大家的代码值得我收藏,我的问题已经解决了。
    对于2楼的:我现在是在做项目,你说的将数据封装到类,那是可以的,将每个hashtable放到data对象,最终会根据data对象来生成json数据
      

  5.   

    本来就是键值,干吗要排序,如果要排序就有其他的如list等等
      

  6.   

    建议用HashMap取代Hashtable如果要对键排序 用TreeMap
    如果要对值排序 转化成Set来做 Set里装的是Map.Entry