package learn;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Set;
public class MapTest2 {
public static void main (String[] args){
HashMap map = new HashMap();
int t;
for(int i=0; i<args.length;i++){
if(map.get(args[i])!=null){
t = (int)map.get(args[i]);
map.put(args[i],new Integer(t+1));
}
else{
map.put(args[i],new Integer(1));
}
}
Set set = map.keySet();
for(Iterator iter = set.iterator();iter.hasNext();){
String c = (String)iter.next();
Integer a = (Integer)map.get(c);
System.out.println("name:"+c+"number:"+a);
}
}
}
Integer a = (Integer)map.get(c);
這一句中如果是c的話 輸出正常,是:
name:worlsnumber:3
name:worldnumber:1
如果是
(String)iter.next()
的話輸出不正常,是:
name:worlsnumber:1
IDE eclipse mars
運行參數: worls worls world worls
你的代碼是沒有問題的,肯定只有c=iter.next()時直接取當前這個key對應的值才正確啊。
如果是下面這樣:
String c = (String)iter.next();
Integer a = (Integer)map.get((String)iter.next());
上面代碼執行了兩次next,相當於你直接跳躍遍歷了,第一個元素c你沒有處理,直接跳到下一個元素了。當然就只輸出了一條記錄。
實際上是由多少條記錄,就應該執行多少次next才對。所以,只能每判斷一次hasNext,就執行一次獲取操作next()。