HashTable类可用做容器,其示意图如下。即给容器中每个对象指定一个不重复的key,以便从中取出需要的对象。Key Value
Str1 Val1
Str2 Val2
Str3 Val3
…… ……
Strn valn现需要将容器中的对象按key进行排序,拟重新封装该类。在如下的新的类中使用HashTable容器,但是key被限制为字符串类型,相应地进行了put和get方法的重定义,并增加了sort方法进行排序。
请完成下面代码中的sort方法。由于对容器中的数据量没有特别的限制,因此请使用效率较高的排序方法。另:排序方法为升序。public class HashStringTable {
.HashTable  mTable;
.
.public  Object  put(  String  key, Object  value  )  {
return  mTable.put( key, value );
} public  Object  get(  String  key  )  {
return  mTable.get(  key  );
}public void sort(  )  {
……
return;
}
}

解决方案 »

  1.   

    可以直接使用HashSet
    key就自动排序的。。
      

  2.   

    呵呵,刚才发现了,你这个问题其实就是要写一个排序算法 
    现在排序算法很多那么只要先把Hashtable里面的所有数据拿出来放在数组里面,然后用排序算法来排序
    之后再put进Hashtable
      

  3.   

    怎么取呢,是不是先取出关键字后,然后对他们进行排序吗,
    排序好了后再对应的去取关键字对应的值吗
    然后在把他们put进Hashtable
    那这样的话是不是要建立两个相应的数组存放他们阿
    有没有一个好点的思路。
      

  4.   

    我想知道,排序后又怎么使用?
    或者说,排序后的对象存在哪个容器里?
    还是Hashtable么?
      

  5.   

    是的,排序后又存放在那个Hashtable中我想问:Hashtable是不是只能做到逻辑上的排序,真正在物理硬盘上数据的存放还是无序的,就是指就算我现在对于Hashtable排序好了,但是真正物理上它里面的元素还是无序的。
      

  6.   

    我试着写了一个demo,不知道是否合乎要求:/*
     * 创建日期 2005-4-20
     */
    package com.zcjl.test.base;import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.HashMap;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Set;
    import java.util.TreeSet;/**
     * @author cong_zhang
     */
    public class SortedStringMap {    private HashMap map     = new HashMap();
        private Set     keySet  = map.keySet();    public Object get(String key) {
            return map.get(key);
        }    public void put(String key, Object value) {
            map.put(key, value);
        }    public void sort() {
            List list = new ArrayList(map.keySet());        Collections.sort(list, new Comparator() {
                public int compare(Object a, Object b) {
                    return a.toString().toLowerCase().compareTo(b.toString()
                        .toLowerCase());
                }
            });        this.keySet = new TreeSet(list);
        }    public Set keySet() {
            return this.keySet;
        }    public static void main(String[] args) {
            SortedStringMap map = new SortedStringMap();
            map.put("123", "123");
            map.put("234", "234");
            map.put("345", "345");
            map.put("456", "456");
            map.put("567", "567");
            
            for (Iterator it = map.keySet().iterator(); it.hasNext();) {
                String key = (String) it.next();
                System.out.println("key[" + key + "], value[" + map.get(key) + "]");
            }
            
            System.out.println("\n");
            map.sort();
            for (Iterator it = map.keySet().iterator(); it.hasNext();) {
                String key = (String) it.next();
                System.out.println("key[" + key + "], value[" + map.get(key) + "]");
            }
        }
    }
      

  7.   

    是不是这样排序了 KeySet 以后用   Iterator iter = map.entrySet() ; 迭代这个键 总是有序的啊?