Java 地图地图 - 如何将内部地图保留为地图?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/4120216/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-14 11:49:05  来源:igfitidea点击:

Map of maps - how to keep the inner maps as maps?

javahashmap

提问by john

My goal is to create a map of maps so that I can retrieve info of the outer map by its key and then access its "inner" maps by their keys.

我的目标是创建地图地图,以便我可以通过其键检索外部地图的信息,然后通过其键访问其“内部”地图。

However, when I got each inner map, the map I created originally became an Object and I cannot use key to access its value as I do with the outer map.

然而,当我得到每个内部映射时,我最初创建的映射变成了一个对象,我不能像使用外部映射那样使用键来访问它的值。

To learn from you experts, I would like to know how to keep all the maps as maps. Or, is it possible at all?

向各位高手学习,我想知道如何将所有地图保存为地图。或者,有可能吗?

here is my exercise program:

这是我的锻炼计划:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

public class MapExample {

    public static void main(String[] args) {

        Map<Object,String> mp=new HashMap<Object, String>();

        // adding or set elements in Map by put method key and value pair
        mp.put(new Integer(2), "Two");
        mp.put(new Integer(1), "One");
        mp.put(new Integer(3), "Three");
        mp.put(new Integer(4), "Four");

        Map<Object,String> mp2=new HashMap<Object, String>();
        mp2.put(new Integer(2), "Two2");
        mp2.put(new Integer(1), "One2");
        mp2.put(new Integer(3), "Three2");
        mp2.put(new Integer(4), "Four2");

        Map<Object,String> mpMaps=new HashMap();

        mpMaps.put("Map1",mp);
        mpMaps.put("Map2",mp2);

        System.out.println("This is a map of Maps:   " + mpMaps); 

        for (int i=0;i<mpMaps.size();i++){
                     ArrayList a = new ArrayList(mpMaps.keySet());
                     Object o=a.get(i);
                     System.out.println("all together: " + mpMaps.size() + "each element is:  " + o + " value: " + mpMaps.get(o));
        }             
    }
}

SOLUTIONS:

解决方案:

   Map<Object,Map<Object,String>
    Map<String, Object> mpMaps=new HashMap<String, Object>(); 

by ameer and sleske

作者:ameer 和 sleske

采纳答案by ameer

Here is the updated code that seems to work, you need to type the map of maps as <String, Object>since mp isn't a string you can't do <Object, String>.

这是似乎有效的更新代码,您需要输入地图的地图,<String, Object>因为 mp 不是您无法执行的字符串<Object, String>

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.ArrayList;

public class MapExample {

    public static void main(String[] args) {

        Map<Object,String> mp=new HashMap<Object, String>();

        // adding or set elements in Map by put method key and value pair
        mp.put(new Integer(2), "Two");
        mp.put(new Integer(1), "One");
        mp.put(new Integer(3), "Three");
        mp.put(new Integer(4), "Four");

        Map<Object,String> mp2=new HashMap<Object, String>();
        mp2.put(new Integer(2), "Two2");
        mp2.put(new Integer(1), "One2");
        mp2.put(new Integer(3), "Three2");
        mp2.put(new Integer(4), "Four2");

        Map<String, Object> mpMaps=new HashMap<String, Object>();

        mpMaps.put("Map1",mp);
        mpMaps.put("Map2",mp2);

        System.out.println("This is a map of Maps:   " + mpMaps); 

        for (int i=0;i<mpMaps.size();i++){
                     ArrayList<Object> a = new ArrayList<Object>(mpMaps.keySet());
                     Object o=a.get(i);
                     System.out.println("all together: " + mpMaps.size() + "each element is:  " + o + " value: " + mpMaps.get(o));
        }             
    }
}

回答by sleske

Your code does not compile.

您的代码无法编译。

One problem is this:

一个问题是:

Map<Object,String> mpMaps=new HashMap();
mpMaps.put("Map1",mp);

This won't work, as you put a Map (mp) into a Map whose values need to be Strings.

这将不起作用,因为您将 Map ( mp) 放入其值需要为 的 Map 中Strings

Use Map<Object,Map<Object,String>and you should be fine.

使用 Map<Object,Map<Object,String>,你应该没问题。

回答by sleske

Map<Object,String> mpMaps=new HashMap();

mpMaps.put("Map1",mp);

you'll get an exception with this statement: mp has type Map but you're treating it as a String.

你会得到这个语句的异常: mp 有类型 Map 但你把它当作一个字符串。

If I understood your question right, you'll either need a reference to the object used as key or you'll need to type cast your key/values.

如果我正确理解您的问题,您将需要对用作键的对象的引用,或者您需要输入键/值。

回答by Zahid

An alternate solution would be to use Commons MultiKey for avoiding map of maps. See details at http://commons.apache.org/collections/apidocs/and org.apache.commons.collections.keyvalue.MultiKey

另一种解决方案是使用 Commons MultiKey 来避免地图映射。在http://commons.apache.org/collections/apidocs/和 org.apache.commons.collections.keyvalue.MultiKey查看详情

回答by iali87

Example

例子

This is an example on creating a map of maps.

这是创建地图地图的示例。

回答by AzizSM

Here is a simple example using HashMap

这是一个简单的例子,使用 HashMap

    HashMap<String, HashMap<String, Object>> outerMap = new HashMap<String, HashMap<String, Object>>();

    HashMap<String, Object> innerMap1 = new HashMap<String, Object>();
    HashMap<String, Object> innerMap2 = new HashMap<String, Object>();


    innerMap1.put("Name", "az");
    innerMap1.put("Address", "7 lab");
    innerMap1.put("Age", 40);

    innerMap2.put("Name", "sab");
    innerMap2.put("Address", "bk3");
    innerMap2.put("Age", 35);

    outerMap.put("1",innerMap1);
    outerMap.put("2", innerMap2);
    System.out.println("outerMap = " + outerMap);

output:

输出:

outerMap = {1={Address=7 lab, Age=40, Name=az}, 2={Address=bk3, Age=35, Name=sab}}