Map [] myArr,每个都有<k>整数,<v> HashSet ...无法访问HashSet(Java)</v> </k>

时间:2011-02-20 18:30:08

标签: java map hashmap hashset

我无法向下导航到我的数据结构中的HashSets

我声明了一个Map []数组,并用HashMap填充了K of Integer和V的HashSet of String但是无法将项添加到HashSet。

我已经修改了代码以说明......

private Map[] myMaps = null;

myMaps = new Map[numRepeats];
myMaps[0] = new HashMap<Integer,HashSet<String>>();
myMaps[0].put(0, new HashSet<String>());

NetBeans中的弹出窗口显示我可以使用

访问java.util.Map
myMaps[0].

但是使用map.get(0)方法我认为会返回HashSet

myMaps[0].get(0).

显示我必须使用泛型java.lang.object,而不是HashSet。因为接下来我需要使用HashSet.add()方法,这意味着我被卡住了。我很感激建议。

谢谢

3 个答案:

答案 0 :(得分:1)

您需要将其投射到HashMap<Integer,HashSet<String>>

答案 1 :(得分:0)

定义地图时,您可以使用所涉及的完整类型对其进行定义,因此:

private Map<Integer, HashSet<String>>[] myMaps = null;

然后,您不必将其强制转换(假设myMaps中的所有地图都属于该类型)。

答案 2 :(得分:0)

不幸的是,Java Generics让一个泛型类的数组变得相当棘手。但是,它是可能的,它将以类型安全的方式解决您的问题。

第一。像这样宣布你的地图

private Map<Integer,Set<String>>[] myMaps = null;

第二。使用效用函数来分配

@SuppressWarnings("unchecked")
public static <T> T[] newMapArray( int size )
{
    return (T[])java.lang.reflect.Array.newInstance(Map.class, size);
}

第三。像这样分配myMaps

myMaps = newMapArray(numRepeats);
相关问题