所以我有这个HashMap:
HashMap<String,HashMap<Float,HashMap<Float,String>>>
但我不确定如何在最深的嵌套结构中添加和删除元素。 有人能举个例子吗?
谢谢:)
更新
感谢您的帮助,但我怎样才能加入HashMap的第一级?我试过.put,我收到了一个错误。
由于
答案 0 :(得分:5)
首先创建地图:
HashMap<String, HashMap<Float,HashMap<Float, String>>> map = new HashMap<>();
然后将第一级地图放入其中:
map.put("one", new HashMap<Float, HashMap<Float, String>>());
然后将HashMap放在最后一级:
map.get("one").put(1.0f,new HashMap<Float, String>());
现在在新地图中添加一个元素:
map.get("one").get(1.0f).put(2.0f,"this is lame");
现在它可以如上所述得到:
System.out.println(map.get("one").get(1.0f).get(2.0f));
答案 1 :(得分:4)
如果您打算构建具有可变深度的同构HashMaps ,请使用递归数据结构。
以下是提供示例界面的实现:
class NestedMap<K, V> {
private final HashMap<K, NestedMap> child;
private V value;
public NestedMap() {
child = new HashMap<>();
value = null;
}
public boolean hasChild(K k) {
return this.child.containsKey(k);
}
public NestedMap<K, V> getChild(K k) {
return this.child.get(k);
}
public void makeChild(K k) {
this.child.put(k, new NestedMap());
}
public V getValue() {
return value;
}
public void setValue(V v) {
value = v;
}
}
和示例用法:
class NestedMapIllustration {
public static void main(String[] args) {
NestedMap<Character, String> m = new NestedMap<>();
m.makeChild('f');
m.getChild('f').makeChild('o');
m.getChild('f').getChild('o').makeChild('o');
m.getChild('f').getChild('o').getChild('o').setValue("bar");
System.out.println(
"nested element at 'f' -> 'o' -> 'o' is " +
m.getChild('f').getChild('o').getChild('o').getValue());
}
}
答案 2 :(得分:1)
拥有HashMap<String,HashMap<Float,HashMap<Float,String>>> map
且不考虑null
值,只需按照您在脑海中制定的逻辑顺序来访问内部地图并转换为以下代码:
map.get(strKey).get(floatKey).put(newFloat, newString);
map.get(strKey).get(floatKey).remove(newFloat);
strKey
是第一级地图中的关键String
floatKey
第二级地图中的密钥Float
答案 3 :(得分:1)
我们来看看,好吗?
第一层是HashMap<String, HashMap>
,所以让我们get
。
map.get(strKey); // Returns another HashMap
我们还有另一个HashMap
,所以我们该怎么办?我们再次使用get
!
map.get(strKey).get(1.0f); // Returns another HashMap
再次,我们该怎么办?那只有一件事。 get
!
map.get(strKey).get(1.0f).get(1.0f); // Returns a String
这是深层嵌套HashMap
中的值。
答案 4 :(得分:0)
首先,您将使用String作为键来获取第一个HashMap。它会返回HashMap<Float,HashMap<Float,String>>
。
然后,您将使用Float作为键来获取该HashMap。它将返回HashMap<Float,String>
。
你最终会使用Float作为键来获取HashMap,在那里,你有你想要的String。 与put相同而不是在最后一个HashMap上插入一个值。