【发布时间】:2016-03-11 22:28:42
【问题描述】:
有没有办法在没有警告的情况下定义一个 HashMap 有另一个 HashMap 作为值?
我的意思是,如果我使用泛型,我必须定义:
HashMap<Integer, HashMap<Integer, HashMap<Integer, HashMap<Integer,HashMap etc>> map = new HashMap<>();
通过以下方式是正确/唯一的方法吗?
HashMap<Integer, HashMap> map = new HashMap<Integer, HashMap>();
基于 cmets 的更新:
我只是在审查泛型,我的印象是,将哈希图作为另一个哈希图的值并不少见。
根据@JimGarrison 评论更新:
使用散列的散列在其他语言中是一种非常常见的结构,所以我很惊讶我需要实际给出一些特定的用例才能使我的问题有意义。如果我需要给出一个可以使用的真实示例,例如浏览一些层次结构。所以我们可以“模仿”一棵树。
【问题讨论】:
-
真正的问题是为什么你有一个 Map of a Map of a Map.
-
为什么要以这种方式分层哈希图?为什么不把一个充满整数的对象(定义了相关的
equals和hashCode方法)作为单个hashmap 的键? -
除了 Tunaki 正确所说的:你知道内部哈希图应该存储什么值吗?现在主要问题是你最内部的 HashMap 没有指定的数据类型应该存储在其中(它是原始类型),这意味着你总是会收到编译警告。您可以使用像
HashMap<?,?>这样的通配符来消除该警告,但这也会阻止您操纵该地图。 -
@Pshemo:是的。 Integer 是 Hashmap 的 key 和 value 相同类型。 IE。形成一个“递归”
-
@Tunaki:不是图图图图。它是一个 hashmap 作为另一个 hashmap 的值。我认为泛型使事情复杂化
标签: java generics data-structures hashmap