2010-06-03 177 views
3

有人可以解釋下面代碼中發生了什麼,以及它如何以36結尾?有關java哈希映射的幫助

感謝

編輯阿米爾Rachum

public class HashMap2009 { 
    public static void main (String[] args) { 
     Map<String, Integer> myMap2009 = 
      new HashMap<String, Integer>(); 
     myMap2009.put("one", new Integer(1)); 
     myMap2009.put("three", new Integer(3)); 
     myMap2009.put("five", new Integer(5)); 
     myMap2009.put("seven", new Integer(7)); 
     myMap2009.put("nine", new Integer(9)); 
     System.out.println(oddOne(myMap2009)); 
    } 
    private static int oddOne(Map<String, Integer> myMap2009) { 
     if (myMap2009.isEmpty()) 
      return 11; 
     else { 
      Set<String> st = myMap2009.keySet(); 
      String key = st.iterator().next(); 
      int num = myMap2009.get(key); 
      myMap2009.remove(key); 
      return num + oddOne(myMap2009); 
     } 
    } 
} 
+1

你爲什麼不張貼在這裏?您可以發佈您的代碼,如果您添加一個額外的4個空格縮進,網站會爲您設置格式。 – OscarRyz 2010-06-03 22:36:47

+0

道歉我只有一個編碼圖像,但如果你右鍵單擊圖像並選擇「查看圖像」,它將是全尺寸。 – user357966 2010-06-03 22:39:18

+0

@Support - 多語言SO - 感謝我的名字編輯。 – 2010-06-03 22:58:07

回答

5

這是recursion一個簡單的例子,這導致在由一個和在地圖一個加入了所有的鍵時映射爲空,它增加了另一個11.這總計高達36.

+0

謝謝,這是有道理的,我看到我要去哪裏錯了,因爲我有它與堆棧混淆! – user357966 2010-06-03 22:43:37

2

這是一個recursive函數,每次調用時,都會將第一個元素的值添加到地圖中,然後將其刪除。 (用於當它是空的9,7,5,3,1在圖中的每個值和11)

9+7+5+3+1+11 =

如果映射爲空,它返回11

所以順便說一句,這在我看來是一個可怕的方式來教遞歸(因爲地圖產生噪音太大)

更簡單(我認爲更有效)的方式會一直:

import java.util.ArrayList; 
import java.util.List; 
import java.util.Iterator; 
public class ArrayList2009 { 
    public static void main(String [] args) { 
     List<Integer> list = new ArrayList<Integer>(); 
     list.add(1); 
     list.add(3); 
     list.add(5); 
     list.add(7); 
     list.add(9); 
     System.out.println(addOne(list));       
    } 
    private static int addOne(List<Integer> list){ 
     if (list.isEmpty()) { 
      return 11; 
     } else { 
      Iterator<Integer> i = list.iterator(); 
      int num = i.next(); 
      i.remove(); 
      return num + addOne(list); 
     } 
    } 
} 

它完全相同,但由於List界面更容易理解,所以引入的噪音更少。

0

當調用oddOne它會得到

  • 第一號
  • 取出數
  • 將它添加到oddOne的結果(除去數)

這種重複,直到empty whne oddOne return 11

所以我們以

結束

1 +(3 +(5 +(7 +(9 + 11))))= 36

實際的順序將Ê所有錯雜,因爲它是一個HashMap但這對添加數字

沒有影響
0

您正在進行遞歸調用,每次調用都從地圖中刪除一個元素。

您可以從num == 1開始(地圖是無序的),並從地圖中刪除它。然後你做遞歸調用,這會給你num == 3.這個過程一直持續到你的地圖是空的,這會導致1 + 3 + 5 + 7 + 9,另外你的空地圖會有11個。

看看遞歸:http://en.wikipedia.org/wiki/Recursion

+0

謝謝你們,非常感謝所有的幫助。 – user357966 2010-06-03 22:49:12