gpt4 book ai didi

java - 使用泛型定义 HashMap 的递归定义

转载 作者:行者123 更新时间:2023-11-30 08:39:55 25 4
gpt4 key购买 nike

有没有办法在没有警告的情况下定义一个 HashMap 并将另一个 HashMap 作为值?
我的意思是,如果我使用泛型,我将不得不定义:

HashMap<Integer, HashMap<Integer, HashMap<Integer, HashMap<Integer,HashMap etc>> map = new HashMap<>();  

通过下面的方法是正确/唯一的方法吗?

HashMap<Integer, HashMap> map = new HashMap<Integer, HashMap>();  

根据评论更新:
我只是在回顾泛型,我的印象是将 HashMap 作为另一个 HashMap 的值并不少见。

根据@JimGarrison 评论更新:
使用散列的散列在其他语言中是一种非常常见的结构,所以我很惊讶我需要实际给出一些特定的用例才能使我的问题有意义。如果我需要举一个可以使用的真实例子,一个例子就是浏览一些层次结构。所以我们可以“模仿”一棵树。

最佳答案

您可能会找到 F-bound types有用,至少从理论上来说是这样。在您的情况下,这可能是:

class FBoundedMap<K> extends HashMap<K, FBoundedMap<K>> {
}

那么你可以这样使用它:

FBoundedMap<Integer> map = new FBoundedMap<>();

FBoundedMap<Integer> inner1 = new FBoundedMap<>();
map.put(1, inner1);

FBoundedMap<Integer> inner2 = new FBoundedMap<>();
map.put(2, inner2);

FBoundedMap<Integer> innerMost1 = new FBoundedMap<>();
inner1.put(11, innerMost1);

FBoundedMap<Integer> innerMost2 = new FBoundedMap<>();
inner2.put(22, innerMost2);

System.out.println(map); // {1={11={}}, 2={22={}}}

你只能在最后存储空 map ,在中间存储 map 的 map ,所以我看到的唯一实际用途是将数据存储在键中(在这种情况下,这些将是 Integers) 并使用这些值来保持对树结构子节点的引用。

另一种方法是让值是任何类型,包括 HashMap。这样,您可以将 map 存储为其他 map 的值。在这种情况下,您需要将 map 声明为:

Map<Integer, Object> map = new HashMap<>();

Map<Integer, Object> inner1 = new HashMap<>();
map.put(1, inner1);

Map<Integer, Object> inner2 = new HashMap<>();
map.put(2, inner2);

Map<Integer, Object> innerMost1 = new HashMap<>();
inner1.put(11, innerMost1);

Map<Integer, Object> innerMost2 = new HashMap<>();
inner2.put(22, innerMost2);

System.out.println(map); // {1={11={}}, 2={22={}}}

当然,如果你需要得到一个值,你需要转换:

Map<Integer, Object> value = (Map<Integer, Object>) map.get(1);
System.out.println(value); // {11={}}

关于java - 使用泛型定义 HashMap 的递归定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35951083/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com