如何在嵌套HashMap中放入/获取值

我想创建一个嵌套的HashMap,它将采用float类型的两个键,并给出Integer类型的值。

public static HashMap<Float, HashMap> hashX = new HashMap<Float,HashMap>(); 

有没有像普通HashMap那样放置/获取值的简单方法

  hashX.put(key, value); hashX.get(key); 

或者它是一种必须使用的更复杂的方法? 我已经在网上搜索了一个解决方案,但我发现很难找到适用于我的解决方案。 任何帮助,将不胜感激!

 Map> map = new HashMap<>(); map.put(.0F, new HashMap(){{put(.0F,0);}}); map.put(.1F, new HashMap(){{put(.1F,1);}}); map.get(.0F).get(.0F); 

你必须从外部映射中get()嵌套映射,并且调用可以调用put()get()

 float x = 1.0F; HashMap innerMap = hashX.get(x); if (innerMap == null) { hashX.put(x, innerMap = new HashMap<>()); // Java version >= 1.7 } innerMap.put(2.0F, 5); 

您可以使用如下方法创建包装类:

 public class MyWrapper { private Map> hashX; // ... public void doublePut(Float one, Float two, Integer value) { if (hashX.get(one) == null) { hashX.put(one, new HashMap()); } hashX.get(one).put(two, value); } } 

请注意,在声明字段时,应使用接口而不是具体实现。 例如,如果需要,可以更容易地将HashMap重构为ConcurrentHashMap

你可以这样做:

 HashMap h1 = new HashMap(); h1.put(1.0f,new Integer(1)); HashMap h2 = new HashMap(); h2.put(3.0f,new Integer(3)); hashX.put(1.0f, h1); hashX.put(1.0f, h1); 

我想创建一个嵌套的HashMap,它将采用float类型的两个键,并给出Integer类型的值。

不需要嵌套的Map。 如果要使用复合键进行查找,最好将地图声明为此类。 在JFK中没有一个好的Pair类,但你可以使用Map.Entry ,这有点不方便使用但是有效:

 Map, Integer> map = new .... 

有关创建Map.Entry实例的信息,请参阅https://stackoverflow.com/a/3110563/18573