将hashMap存储在hashMap中

时间:2011-02-20 11:24:12

标签: java hashmap

我正在从文本文件中读取数据,并希望将HashMap存储在另一个HashMap中。

HashMap<string,HashMap<string,value>>

如何存储数据并检索它? 任何示例代码将不胜感激...... 谢谢你

5 个答案:

答案 0 :(得分:36)

示例:

创建并填充地图

Map<String, Map<String, Value>> outerMap = new HashMap<String, HashMap<String, Value>>();
Map<String, Value> innerMap = new HashMap<String, Value>();    
innerMap.put("innerKey", new Value());

存储地图

outerMap.put("key", innerMap);

检索地图及其值

Map<String, Value> map = outerMap.get("key");
Value value = map.get("innerKey");

答案 1 :(得分:7)

创建两个简单的Hashmaps:InnerMap和OuterMap

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

填充HashMaps

    innerMap.put("InnerKey", "InnerValue");
    outerMap.put("OuterKey", innerMap);

从HashMaps中重新获取值

    String value = ((HashMap<String, String>)outerMap.get("OuterKey")).get("InnerKey").toString();
    System.out.println("Retreived value is : " + value);

答案 2 :(得分:3)

你会得到一个看起来像二维HashMap的东西。这意味着您需要2个String来存储值,并且还需要检索一个。

例如,您可以编写一个类来包装该复杂性,就像那样(未经测试的代码):

public class HashMap2D<T> {
    private HashMap<String,HashMap<String,T>> outerMap;

    public HashMap2D() {
        outerMap = new HashMap<String,HashMap<String,T>>();
    }

    public void addElement(String key1, String key2, T value) {
        innerMap=outerMap.get(key1);
        if (innerMap==null) {
            innerMap = new HashMap<String,T>();
            outerMap.put(key1,innerMap);
        }
        innerMap.put(key2,value);
    }

    public T getElement(String key1, String key2) {
        Hashmap innerMap = outerMap.get(key1);
        if (innerMap==null) {
            return null;
        }
        return innerMap.get(key2);
    }
}

如果您希望方法一次处理多个数据,则会更复杂,但遵循相同的原则。

答案 3 :(得分:2)

通过使用双键将两个嵌套地图展平为一个大地图,这将解决使用一个地图的相同问题(尽管,这不会直接回答您的问题)。

public class Key2D{
  private final String outer;
  private final String inner;

  public Key2D(String outer, String inner){
    this.outer = outer;
    this.inner = inner;
  }

  //include default implementations for
  //Object.equals(Object) and Object.hashCode()
  //Tip: If you're using Eclipse it can generate
  //them for you.
}

然后用双键创建一个地图:

Map<Key2D, Value> map = new HashMap<Key2D, Value>();
map.put(new Key2D("outerKey", "innerKey"), "Value");
map.get(new Key2D("outerKey", "innerKey")); // yields "Value"

这提供了一个更短的解决方案。表现明智,它可能大致相同。内存性能可能略好一些(但只是猜测)。

答案 4 :(得分:0)

HashMap中的HashMap会导致可读性问题,尤其是当它超出两个级别时。我假设当您从文本文件中读取数据时,您希望对行和列中的输入进行分类,这些输入应类似于类别中的多级别类别或类别。如果您可以发布样本数据和意图,我可以提出一个Custom类示例。

public class Category {
  private List<Category> subCategories;
  private List<Item> items;
}

上述数据结构将帮助您在分类数据时解决任何级别的嵌套问题。此示例特定于商店商品的分类。