在Java中访问深度嵌套的哈希映射
我有一个HashMap:在Java中访问深度嵌套的哈希映射,java,hashmap,Java,Hashmap,我有一个HashMap: HashMap 但我不确定如何在嵌套最深的结构中添加和删除元素。 有人能举个例子吗 谢谢:) 更新: 谢谢你的帮助,但是我怎样才能把HashMap放在第一级呢?我已经试过了。放错了 感谢拥有HashMap映射且不考虑空值值,只需按照您头脑中制定的逻辑顺序访问内部映射并转换为以下代码: map.get(strKey).get(floatKey).put(newFloat, newString); map.get(strKey).get(floatKey).remove(n
HashMap
但我不确定如何在嵌套最深的结构中添加和删除元素。
有人能举个例子吗
谢谢:)
更新:
谢谢你的帮助,但是我怎样才能把HashMap放在第一级呢?我已经试过了。放错了
感谢拥有HashMap映射
且不考虑空值
值,只需按照您头脑中制定的逻辑顺序访问内部映射并转换为以下代码:
map.get(strKey).get(floatKey).put(newFloat, newString);
map.get(strKey).get(floatKey).remove(newFloat);
strKey
是一级地图中的一个键String
floatKey
第二级映射中的一个键Float
,因此,首先您将使用字符串作为键对第一个HashMap执行get操作。它将返回一个HashMap
然后,您将使用一个Float作为键在HashMap上执行get。它将返回一个HashMap
最后,您将使用一个浮点作为键在HashMap上执行get,在那里,您就得到了所需的字符串。
使用put而不是get在最后一个HashMap上插入值也是一样的。让我们看看,好吗 第一层是一个
HashMap
,所以让我们获取
map.get(strKey); // Returns another HashMap
我们得到了另一个HashMap
,我们该怎么办?我们再次使用get
map.get(strKey).get(1.0f); // Returns another HashMap
再说一遍,我们该怎么办?只有一件事<代码>获取
map.get(strKey).get(1.0f).get(1.0f); // Returns a String
这是深度嵌套的哈希映射中的值,请首先创建映射:
HashMap<String, HashMap<Float,HashMap<Float, String>>> map = new HashMap<>();
现在可以得到如上所述:
System.out.println(map.get("one").get(1.0f).get(2.0f));
如果您计划构造具有可变深度的同构哈希映射,请使用递归数据结构
下面是一个提供示例接口的实现:
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;
}
}
类嵌套映射{
私有最终HashMap子级;
私人价值;
公共嵌套地图(){
child=newhashmap();
值=空;
}
公共布尔hasChild(K){
返回此.child.containsKey(k);
}
公共嵌套映射getChild(K){
返回此.child.get(k);
}
公共无效生成子对象(K){
this.child.put(k,newnestedmap());
}
public V getValue(){
返回值;
}
公共无效设置值(V){
值=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());
}
}
类嵌套的资本说明{
公共静态void main(字符串[]args){
NestedMap m=新的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(
“位于'f'->'o'->'o'的嵌套元素为”+
m、 getChild('f').getChild('o').getChild('o').getValue());
}
}
您至少需要提供3个键。outerHashmap.get(key1.get(key2.put)(key3,value)代码>非常好的解释谢谢你的帮助伙计们:D
System.out.println(map.get("one").get(1.0f).get(2.0f));
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());
}
}