初始化HashMap的正确方法,HashMap可以保存不同的值类型吗?

2022-08-31 15:35:12

所以我对Java中的s有两个问题:HashMap

  1. 初始化 ?我认为在我的情况下,最好使用:HashMap

    HashMap x = new HashMap();
    

    但是Eclipse一直建议我使用:

    HashMap<something, something> map = new HashMap();
    

    哪个更好?

  2. 是否可以将不同类型的对象/数据类型保存为值?例如,这是否有效并且没问题:HashMap

    map.put("one", 1);
    map.put("two", {1, 2});
    map.put("three", "hello");
    

    在第一个中,我想要一个作为值,在第二个中是一个,第三个是字符串。这在 Java 中用 s 可以吗?另外,是否可以将 a 存储为 a 中的值?put()intint[]HashMapHashMapHashMap


答案 1

这实际上取决于您需要哪种类型的安全。非通用的完成方式最好是:

 Map x = new HashMap();

请注意,键入为 .这使得将来更改实现(a或a)变得更加容易。xMapTreeMapLinkedHashMap

您可以使用泛型来确保一定程度的类型安全性:

Map<String, Object> x = new HashMap<String, Object>();

在Java 7及更高版本中,您可以执行

Map<String, Object> x = new HashMap<>();

上述内容虽然更详细,但避免了编译器警告。在这种情况下,的内容可以是任何 ,因此可以是 、 等,这就是您正在做的事情。HashMapObjectIntegerint[]

如果您仍在使用Java 6,Guava Libraries(尽管自己动手很容易)有一个名为newHashMap()的方法,该方法避免了在执行.它从变量声明中推断类型(这是 Java 7 之前的构造函数上不可用的 Java 功能)。new

顺便说一句,当你添加一个int或其他原语时,Java会自动装箱它。这意味着该代码等效于:

 x.put("one", Integer.valueOf(1));

你当然可以将 a 作为值放在另一个值中,但我认为如果你以递归方式这样做,就会有问题(即把 a 作为值本身)。HashMapHashMapHashMap


答案 2

这是 Java 1.5 所做的更改。你首先列出的是旧方法,第二个是新方法。

通过使用HashMap,您可以执行以下操作:

HashMap<String, Doohickey> ourMap = new HashMap<String, Doohickey>();

....

Doohickey result = ourMap.get("bob");

如果地图上没有类型,则必须执行以下操作:

Doohickey result = (Doohickey) ourMap.get("bob");

这真的非常有用。它可以帮助您捕获错误并避免编写各种额外的演员表。这是我最喜欢的1.5(及更新)功能之一。

您仍然可以在映射中放置多个内容,只需将其指定为Map,然后就可以将任何对象放入(字符串,另一个Map和整数,以及三个MyObjects,如果您如此倾向)。