Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用泛型定义HashMap的递归定义_Java_Generics_Data Structures_Hashmap - Fatal编程技术网

Java 使用泛型定义HashMap的递归定义

Java 使用泛型定义HashMap的递归定义,java,generics,data-structures,hashmap,Java,Generics,Data Structures,Hashmap,有没有一种方法可以在没有警告的情况下将另一个HashMap定义为值的HashMap 我的意思是,如果我使用泛型,我必须定义: HashMap<Integer, HashMap<Integer, HashMap<Integer, HashMap<Integer,HashMap etc>> map = new HashMap<>(); HashMap您可能会发现它很有用,至少从理论角度来看是如此。在您的情况下,这可能是: class FBound

有没有一种方法可以在没有警告的情况下将另一个
HashMap
定义为值的
HashMap
我的意思是,如果我使用泛型,我必须定义:

HashMap<Integer, HashMap<Integer, HashMap<Integer, HashMap<Integer,HashMap etc>> map = new HashMap<>();  
HashMap您可能会发现它很有用,至少从理论角度来看是如此。在您的情况下,这可能是:

class FBoundedMap<K> extends HashMap<K, FBoundedMap<K>> {
}
当然,如果您需要获得一个值,则需要强制转换:

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

真正的问题是,为什么要有一张地图中的一张地图中的一张地图。为什么要以这种方式对hashmaps进行分层?为什么不让一个充满整数的对象(定义了相关的
equals
hashCode
方法)成为单个hashmap的键呢?除了Tunaki正确地说的:你知道内部hashmap应该存储什么值吗?目前的主要问题是,最内部的HashMap没有指定应该存储在其中的数据类型(它是原始类型),这意味着您将始终收到编译警告。您可以使用通配符,如
HashMap
来消除该警告,但这也会阻止您操作该映射。@Pshemo:是的。Integer是与Hashmap类型相同的键和值。也就是说,在Tunaki形成一个“递归”:它不是一个映射的映射,一个映射的映射。它是一个hashmap,作为另一个hashmap的值。泛型使事情复杂化了think@Jim编辑,谢谢你让我知道问题中的更新。
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<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={}}