2011-05-19 33 views
0

我有以下代码:回路的设置

LinkedHashMap<String,ArrayList<String>> h; 
Set set = h.entrySet();  
Iterator i = set.iterator(); 
     while(i.hasNext()) { 
      System.out.println(i.next()); 
      Map.Entry me = (Map.Entry)i.next(); 
      String currentSegString = (String) me.getKey(); 

      System.out.println(currentKey+"**************"); 
     } 

打印出这一点:

1=[] 
2************** 
3=[A, B, C] 
4************** 
5=[] 

但后来我删除一行System.out.println(i.next());

LinkedHashMap<String,ArrayList<String>> h; 
Set set = h.entrySet();  
Iterator i = set.iterator(); 
     while(i.hasNext()) { 

      Map.Entry me = (Map.Entry)i.next(); 
      String currentSegString = (String) me.getKey(); 

      System.out.println(currentKey+"**************"); 
     } 

而且它打印出来这个:

1************** 
2************** 
3************** 
4************** 
5************** 

为什么不在每个键的第一种情况下打印**************

回答

6

这是因为当你这样做:

System.out.println(i.next()); 

你跳到下一行,然后Map也做.next()

为此你只看到2出可能的5行。

说明:

 while(i.hasNext()) { 
     System.out.println(i.next()); //skip one #1, #3, #5 
     Map.Entry me = (Map.Entry)i.next(); //goto next one #2, #4 
     String currentSegString = (String) me.getKey(); 

     System.out.println(currentKey+"**************"); //output #2,4 
    } 

二码:

while(i.hasNext()) { 

     Map.Entry me = (Map.Entry)i.next(); //goto next one #1, #2, #3, #4, #5 
     String currentSegString = (String) me.getKey(); 

     System.out.println(currentKey+"**************"); //output #1,2,3,4,5 
    } 

解决的一种方式,这将是:

while(i.hasNext()) { 
     Object temp = i.next(); //goto next one #1, #2, #3, #4, #5 
     System.out.println(temp); 
     Map.Entry me = (Map.Entry)temp; 
     String currentSegString = (String) me.getKey(); 

     System.out.println(currentKey+"**************"); //output #1,2,3,4,5 
    } 
+0

@Neal:如何在不跳过该行的情况下打印出我的内容?所以我想实际看到'1 = []'? – Prostak 2011-05-19 21:31:55

+0

@Prostak,看我的更新 – Neal 2011-05-19 21:32:11

+0

@Neal:在我的情况下会是什么“where someType是i.next()是什么类型”? – Prostak 2011-05-19 21:37:07

2

在第一段代码,你有两个呼叫i.next(),这意味着你的循环只会执行比第二段代码少的次数。

1

这是你的代码应该是什么样子,让您所需的输出:

Map.Entry me; 
LinkedHashMap<String,ArrayList<String>> h; 
Set set = h.entrySet();  
Iterator<Map.Entry> i = set.iterator(); 
while(i.hasNext()) 
{ 
    me = i.next(); 
    System.out.println(me); 
    String currentSegString = (String) me.getKey(); 
    System.out.println(currentKey+"**************"); 
} 

这样,你只能叫i.next();一次。