java哈希映射帮助

java哈希映射帮助,java,hashmap,Java,Hashmap,有人能解释一下下面的代码中发生了什么,以及它是如何以36结尾的吗 谢谢 编辑阿米尔·拉赫姆 public class HashMap2009 { public static void main (String[] args) { Map<String, Integer> myMap2009 = new HashMap<String, Integer>(); myMap2009.put("one", new

有人能解释一下下面的代码中发生了什么,以及它是如何以36结尾的吗

谢谢

编辑阿米尔·拉赫姆

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);
        }
    }
}
公共类HashMap2009{
公共静态void main(字符串[]args){
地图myMap2009=
新的HashMap();
myMap2009.put(“一”,新的整数(1));
myMap2009.put(“三”,新的整数(3));
myMap2009.put(“五”,新的整数(5));
myMap2009.put(“七”,新的整数(7));
myMap2009.put(“九”,新的整数(9));
System.out.println(oddOne(myMap2009));
}
专用静态int oddOne(地图myMap2009){
if(myMap2009.isEmpty())
返回11;
否则{
Set st=myMap2009.keySet();
String key=st.iterator().next();
int num=myMap2009.get(键);
myMap2009。删除(键);
返回num+oddOne(myMap2009);
}
}
}

这是一个简单的示例,其结果是将地图中的所有键逐个相加,当地图为空时,会再添加11个键。这总共是36个。

这是一个函数,每次调用它时,添加映射中第一个元素的值,然后删除它

如果映射为空,则返回11

所以:
9+7+5+3+1+11=
36(9,7,5,3,1表示映射中的每个值,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 );
        }
    }
}
import java.util.ArrayList;
导入java.util.List;
导入java.util.Iterator;
公共类ArrayList2009{
公共静态void main(字符串[]args){
列表=新的ArrayList();
增加第(1)款;
增加(3);
增加(5);
增加(7);
增加(9);
System.out.println(addOne(list));
}
私有静态int addOne(列表){
if(list.isEmpty()){
返回11;
}否则{
迭代器i=list.Iterator();
int num=i.next();
i、 删除();
返回num+addOne(列表);
}
}
}

它的功能完全相同,但引入的噪音较少,因为列表界面更容易理解。

调用oddOne时,它将得到

  • 第一个数字
  • 删除号码
  • 将其添加到oddOne的结果中(删除数字)
重复此操作直到空whne oddOne返回11

因此,我们以

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


实际上,顺序会变得混乱,因为它是一个hashmap,但这对添加数字没有影响

您正在进行递归调用,每次调用都会从映射中删除一个元素

您可以从num==1开始(映射是无序的),然后将其从映射中删除。然后执行递归调用,这将为您提供num==3。这将一直持续到您的地图为空,这将导致1+3+5+7+9,并为您的空地图增加11


看看递归:

为什么不在这里发布?您可以发布您的代码,如果您添加额外的4个空格缩进,网站将为您设置格式。抱歉,我只有一张编码的图像,但如果您右键单击图像并选择“查看图像”,它将是全尺寸的。@支持-多语言-谢谢您以我的名义进行编辑。谢谢,这很有意义,我知道哪里出了问题,因为我把它和一堆东西搞混了!!谢谢各位,非常感谢你们的帮助。