HashMap K和V的默认类型

时间:2008-11-04 23:13:04

标签: java generics collections

我通常会输入我的地图声明,但是正在做一些maint并找到一个没有输入。这让我想到了(哦不!)。 Map声明的默认输入是什么。请考虑以下事项:

Map map = new HashMap();
map.put("one", "1st");
map.put("two", new Integer(2));
map.put("three", "3rd");
for ( Map.Entry entry : map.entrySet() ){
  System.out.println(entry.getKey() + " -> " + entry.getValue());
}

这个错误与Map.Entry上的不兼容类型有关。所以如果我用:

键入声明
Map<Object,Object> map = new HashMap();

然后一切顺利。那么在声明中设置的默认类型是什么?或者我错过了其他什么?

3 个答案:

答案 0 :(得分:8)

没有默认类型。

Java泛型中的类型仅用于编译时检查。它们在运行时被删除,基本消失了。

将泛型视为静态帮助程序,以便a)更好地记录代码,以及b)为类型安全启用一些有限的编译时检查。

答案 1 :(得分:4)

类型是 java.lang.Object

for 构造采用一种 Iterable 并调用其迭代器方法。由于 Set 未使用泛型类型,因此迭代器返回 Object 类型的对象。这些需要显式转换为 Map.Entry

Map map = new HashMap();
map.put("one", "1st");
map.put("two", new Integer(2));
map.put("three", "3rd");
for (Object o : map.entrySet()) {
    Map.Entry entry = (Map.Entry) o;
    System.out.println(entry.getKey() + " -> " + entry.getValue());
}

答案 2 :(得分:1)

HashMap是一组对象,即Think C ++容器。地图的每个元素都是一个用于保存数据的“桶” 您在桶中放置了不同类型的数据,hashmap需要知道这些数据类型并不完全相同。如果在hashmap中只放置了一种类型的数据,则会收到警告,但会进行编译。