我定义了一个hm 类型为HashMap 并且为这个hm 添加了键值对…然后再定义了lhm 类型为LinkedHashMap 现在我想将hm的键值对放到lhm里面…然后我调用lhm的putAll函数…没有报错,可是当我打印lhm的时候,没有一个键值输出,这是什么原因呢?  

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【lrcasd】截止到2008-08-03 12:31:57的历史汇总数据(不包括此帖):
    发帖的总数量:8                        发帖的总分数:300                      每贴平均分数:37                       
    回帖的总数量:6                        得分贴总数量:0                        回帖的得分率:0%                       
    结贴的总数量:6                        结贴的总分数:100                      
    无满意结贴数:1                        无满意结贴分:20                       
    未结的帖子数:2                        未结的总分数:200                      
    结贴的百分比:75.00 %               结分的百分比:33.33 %                  
    无满意结贴率:16.67 %               无满意结分率:20.00 %                  
    楼主加油

    取消马甲机器人,请点这里:http://www.java2000.net/mycsdn/robotStop.jsp?usern=lrcasd
      

  2.   


    package c11;
    import java.util.*;
    /*
     * 第九题:
     * 
     * 使用键值对填充HashMap。打印结果,证明是按散列码排序的。
     * 取出键值对,按键排序,将结果置入LinkedHashMap。证明
     * 后者维持元素插入的顺序。
     * 
     * */class FullHashMap{
    //private String key;
    //private String value;
    private Map hm = new HashMap();
    private LinkedHashMap lhm = new LinkedHashMap(); 

    public void put(Object key,Object value){
    //this.key = (String)key;
    hm.put(key, value);
    }

    public String get(Object key){

    return //"key = " + (String)key + " value = " + (String)hm.get(key);
    (String)hm.get(key);
    }
    /*public String toString(){
    return "key = " + key + " " + "value = " + value;
    }*/

    public void printAll(){
    System.out.println("key = " + hm.keySet());
    System.out.println("value = " + hm.values());
    System.out.println("键值对:" + hm);
    }

    public void put1(){
    //Iterator it = hm.keySet().iterator();
    //while(it.hasNext())
    //lhm.put(key, value);
    lhm.putAll((Map)hm);
    }

    public void printAll1(){
    System.out.println("键值对:" + lhm.values());
    }

    }public class No09 { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO 自动生成方法存根 FullHashMap fhm = new FullHashMap();
    fhm.put("Alan", "Hello");
    fhm.put("john", "Hello1");
    fhm.put("King", "Hello2");
    fhm.put("Dom", "Hello3");
    fhm.put("jack", "Hello4");

    /*fhm.put1("Alan", "Hello");
    fhm.put1("john", "Hello1");
    fhm.put1("King", "Hello2");
    fhm.put1("Dom", "Hello3");
    fhm.put1("jack", "Hello4");*/
    //System.out.println(fhm.get("Alan"));
    fhm.printAll();
    //fhm.put1();
    fhm.printAll1();
    }}
      

  3.   

     * 第九题:
     * 
     * 使用键值对填充HashMap。打印结果,证明是按散列码排序的。
     * 取出键值对,按键排序,将结果置入LinkedHashMap。证明
     * 后者维持元素插入的顺序。那位高手帮忙做做这题啊
      

  4.   

    lhm 我怎么没看到你往这个里面写数据呢?
      

  5.   

        fhm.printAll();
         fhm.put1(); // 把这个注释去掉后
        fhm.printAll1();输出为
    key    =    [jack, Alan, john, Dom, King]
    value    =    [Hello4, Hello, Hello1, Hello3, Hello2]
    键值对:{jack=Hello4, Alan=Hello, john=Hello1, Dom=Hello3, King=Hello2}
    键值对:[Hello4, Hello, Hello1, Hello3, Hello2]
    我看结果很正常啊!
      

  6.   

    将hm的结果放到lhm中作为键值对…而不是直接往lhm里输入键值对…请看题目…我不会置换…  
      

  7.   

    * 使用键值对填充HashMap。打印结果,证明是按散列码排序的。 
    * 取出键值对,按键排序,将结果置入LinkedHashMap。证明 
    * 后者维持元素插入的顺序。谁能把这题目做出来啊
      

  8.   

    个人理解:
    "证明是按散列码排序的",应该迭代HashMap.keySet(),打印每个key的hashCode()"取出键值对,按键排序",应该将HashMap.keySet()的所有key放入array或List,然后用Arrays.sort或Collections.sort排序"将结果置入LinkedHashMap",上述排序后的列表List keys
    for(int i=0; i<keys.size(); ++i)
      linkedHashMap.put(keys.get(i), hashMap.get(keys.get(i)));
    最后打印LinkedHashMap
      

  9.   

    自学?不用考试的话,明显不用去管什么证明,容器会用就行
    上面提到的一些方法看jdk api帮助,然后都调通并且会用就可以了
      

  10.   

    题目我做好啦,帮帮忙看看对不对谢谢了
    package c11;
    import java.util.*;
    /*
     * 第九题:
     * 
     * 使用键值对填充HashMap。打印结果,证明是按散列码排序的。
     * 取出键值对,按键排序,将结果置入LinkedHashMap。证明
     * 后者维持元素插入的顺序。
     * 
     * *//*
     * 我还有个问题:
     * 
     * 在我这个程序里 Collections.sort 的排序顺序是插入顺序,
     * 我知道这个函数可以按照 Comparator 这个接口的 compare 函数
     * 去排序的,(这个东西返回 -1 0 1 不过我还是不知道它怎样排序的,很模糊呀!)
     * 现在我想更改一下排序顺序,请问应该在哪里实现接口?compare 函数内部是怎样实现?
     * 这两点我很模糊,请高手指点一下。
     * 
     * */class FullHashMap{
    private HashMap hm = new HashMap();
    private LinkedHashMap lhm = new LinkedHashMap(); 

    public void put(Object key,Object value){
    hm.put(key, value);
    }

    public String get(Object key){

    return (String)hm.get(key);
    }
    public void printAll(){

    //遍历hm.keySet(),打印每个key的散列码。
    Iterator it = hm.keySet().iterator();
    while(it.hasNext())
    System.out.println("keyCode = " + it.next().hashCode());

    //取出键值对,然后用Collections.sort排序。
    it = hm.keySet().iterator();
    List lst = new ArrayList();
    while(it.hasNext())
    lst.add(it.next());
    Collections.sort(lst);
    it = lst.iterator();
    System.out.println("After collections sort...");
    while(it.hasNext())
    System.out.print(it.next() + " ");
    System.out.println();

    //将排序后的结果放进LinkedHashMap中输出。
    for(int i = 0;i<lst.size();i++)
    //lhm的key是排序后的结果,value是排序后key的值。
    lhm.put(lst.get(i),hm.get(lst.get(i)));
    it = lhm.keySet().iterator();
    System.out.print("LinkedHashMap keySet : ");
    while(it.hasNext())
    System.out.print(it.next() + " ");
    System.out.println();
    System.out.print("LinkedHashMap Output : " + lhm);
    System.out.println();
    System.out.println();

    System.out.println("没有排序前的输出…………………………");
    System.out.println("key = " + hm.keySet());
    System.out.println("value = " + hm.values());
    System.out.println("键值对:" + hm);
    }
    }public class No09 { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO 自动生成方法存根 FullHashMap fhm = new FullHashMap();
    fhm.put("Alan", "Hello");
    fhm.put("john", "Hello1");
    fhm.put("King", "Hello2");
    fhm.put("Dom", "Hello3");
    fhm.put("jack", "Hello4");

    //打印全部结果。
    fhm.printAll();
    }}
      

  11.   

    哇,你的程序越改越乱。看起来好恶心。
    第一个证明散列码,我觉得你直接打印出来就可以看到的吧。
    打印出来的顺序不是你PUT进去的顺序不就证明了啊。
    第二个是说明放进去保持了原来的顺序。
    直接把HashMap里的键值对放到LinkedHashMap里,然后直接打印出来
    如果跟上一个(证明HashMap散列码排序的时候)打印的顺序一致,那表明保持了插入的顺序。
    这样就足够了吧。
    还有,Comparator 接口我用过,里面就是一个compare方法,返回你要比较的容器里任意两个值的差值就可以了。可以return o1-o2;(根据关系返回正数,负数和零)
    然后Collection.sort(L,Comparator c)方法根据C的compare方法返回的值来排序,想一想就知道怎么回事了,只要你以前编写过排序的类。