繁体   English   中英

HashMap K和V的默认类型

[英]HashMap default types for K and V

我通常键入我的地图声明,但是正在做一些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();

一切顺利。 那么在声明中设置的默认类型是什么? 还是我错过了别的什么?

没有默认类型。

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

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

类型是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());
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM