如何在嵌套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
有关创建Map.Entry
实例的信息,请参阅https://stackoverflow.com/a/3110563/18573