在Java中访问深层嵌套的HashMaps

Def*_*ity 2 java hashmap

所以我有这个HashMap:

HashMap<String,HashMap<Float,HashMap<Float,String>>>

但我不确定如何从最深的嵌套结构中添加和删除元素.有人能举个例子吗?

谢谢 :)

更新:

感谢您的帮助,但我怎样才能加入HashMap的第一级?我试过.put,我收到了一个错误.

谢谢

mat*_*att 5

首先创建地图:

HashMap<String, HashMap<Float,HashMap<Float, String>>> map = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)

然后将第一级地图放入其中:

map.put("one", new HashMap<Float, HashMap<Float, String>>());
Run Code Online (Sandbox Code Playgroud)

然后将HashMap放在最后一级:

map.get("one").put(1.0f,new HashMap<Float, String>());
Run Code Online (Sandbox Code Playgroud)

现在在新地图中放置一个元素:

map.get("one").get(1.0f).put(2.0f,"this is lame");
Run Code Online (Sandbox Code Playgroud)

现在它可以如上所述得到:

System.out.println(map.get("one").get(1.0f).get(2.0f));
Run Code Online (Sandbox Code Playgroud)


Mat*_*att 5

如果您计划构建具有可变深度的同类 HashMap ,请使用递归数据结构

下面是提供示例接口的实现:

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;
    }
}
Run Code Online (Sandbox Code Playgroud)

和示例用法:

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());
    }
}
Run Code Online (Sandbox Code Playgroud)