迭代输出遇到问题  “System.out.println((GerbilName)itm.next()+" -----> "+(Gerbil) hm.get((GerbilName)itm.next()));” 键和值不能对应上  不知道是什么原因  请高手指点import java.util.*;public class EX2 { public static void main(String[] args) throws Exception{ HashMap hm = new HashMap();
GerbilName gn = new GerbilName(2);
for(int i=0;i<30;i++)
hm.put(new GerbilName(i), new Gerbil(i));
System.out.println((Gerbil)hm.get(gn));
Set hms=hm.keySet();
Iterator itm = hms.iterator();

while(itm.hasNext()){
GerbilName gbn = (GerbilName)itm.next();
Gerbil gb = (Gerbil) hm.get(gbn);
//正常输出
System.out.println(gbn+" -----> "+gb);
//输出错误
   System.out.println((GerbilName)itm.next()+" -----> "+(Gerbil) hm.get((GerbilName)itm.next()));

}
}}
class GerbilName{
String LENGTH;
String  st="Gerbil";


public GerbilName(int LENGTH) {
this.LENGTH=Integer.toString(LENGTH);
}

public String toString(){
st=st+" "+LENGTH;
return st;
}


}
class Gerbil{

private int number;

public Gerbil(){number=0;}
public Gerbil(int number){this.number=number;}

public String toString(){

return "my number is:"+number+" "+"i am hopping";
}
}

解决方案 »

  1.   

    public class EX2 {
        public static void main(String[] args) throws Exception{
    HashMap hm = new HashMap();
    GerbilName gn = new GerbilName(2);
    for(int i=0;i<30;i++)
    hm.put(new GerbilName(i), new Gerbil(i));
    System.out.println((Gerbil)hm.get(gn));
    Set hms=hm.entrySet();                 //这句

    for (Iterator itm = hms.iterator();itm.hasNext();) {
                      //以下2句
    Map.Entry map1 = (Entry) iter.next();
                      System.out.println(map1.getKey()+":"+(map1.getValue().toString());
    }
        }
    }
    应该差不多吧可以根据你的需要改一下
      

  2.   

    public class EX2 {
        public static void main(String[] args) throws Exception{
            HashMap hm = new HashMap();
            GerbilName gn = new GerbilName(2);
            for(int i=0;i<30;i++)
               hm.put(new GerbilName(i), new Gerbil(i));
            System.out.println((Gerbil)hm.get(gn));
             //这句
            Set hms=hm.entrySet();                        for (Iterator itm = hms.iterator();itm.hasNext();) {
                //以下2句
                Map.Entry map1 = (Entry) itm.next();
                System.out.println(map1.getKey()+":"+(map1.getValue().toString());
            }
        }
    }
    不好意思 上一个中的itm错写成iter了 这个应该差不多
      

  3.   

    晕 不好意思 System.out.println(map1.getKey()+":"+(map1.getValue().toString());这句多了个括号 应为 System.out.println(map1.getKey()+":"+map1.getValue().toString()); 
    ^_^
      

  4.   

    他用的是Set hms=hm.keySet();
    我用的是Set hms=hm.entrySet();而都是用Gerbil gb = (Gerbil) hm.get(gbn);这句取值查下API看看keySet()和entrySet()这两个方法就明白了
      

  5.   

    明白了,你的指针移动问题,在里面多次用到了next所以产生了混乱,第一次移动到后面一个,再next一下就到后面一个了,所以用生成对象的方法是相同的数字,而后面个方法会出现混乱。至于为什么数字会这么乱,主要是因为,map的存储规范是根据关键字,而不是按照近来出去的顺序。这样解释还算可以吧
      

  6.   

    api只说函数使用方法,不说各种类集的存储方式。查了也不能解决问题啊
      

  7.   

    用LinkedHashMap 它是有顺序的
      

  8.   

    楼上的2位好热心~~直觉上应该是  出现next一次 值就会向下一次
    不知道对不对
      

  9.   

    楼主 你把HashMap 换成LinkedHashMap就行了 
    再把System.out.println((GerbilName)itm.next()+" -----> "+(Gerbil) hm.get((GerbilName)itm.next这句去掉 
    因为这句运行迭代器指针下移会影响到上一句System.out.println(gbn+" -----> "+gb);的结果