通用HashMap

时间:2011-09-11 20:01:55

标签: java generics hashmap

我有一个方法check,它有两个哈希映射作为参数。这些地图的关键字为String,其值为StringArraylist

哪种解决方案更好:

public static boolean check(HashMap<String, ?> map1, HashMap<String, ?> map2) {
    for ( entry <String, ? > entry : map1.entryset()) {
        ...
    }
}

public static <V> boolean check(HashMap<String, V> map1, HashMap<String, V> map2) {
    for ( entry <String, V > entry : map1.entryset()) {
        ...
    }    
}

为什么?

您是否还可以向我提供有关这两种解决方案之间差异的更多信息?

2 个答案:

答案 0 :(得分:5)

在第一个,?什么都可以。一个可能是<String, String>另一个可能是<String, Double>。在第二个选项中,它们必须相同。

现在第一个是可以接受的,只要你有能力转换它们就可以比较它们。例如,您可以对两个值进行.toString()进行比较。但就个人而言,我更喜欢第二种,因为它允许我对正在发生的事情有更多的控制权,并给我编译时检查类型。

答案 1 :(得分:0)

第二个在编译时强制执行两个映射的参数设置彼此相同。它还允许您对地图执行一些有用的操作,例如在其中插入非null元素(使用通配符无法实现这一点)。