在Java中访问深度嵌套的哈希映射

在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放在第一级呢?我已经试过了。放错了

感谢

拥有
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());
    }
}