Correct way to initialize HashMap and can HashMap hold different value types?(初始化HashMap的正确方法,HashMap可以保存不同的值类型吗?)
问题描述
所以我有两个关于 Java 中的 HashMap
s 的问题:
So I have two questions about HashMap
s in Java:
初始化
HashMap
的正确方法是什么?我认为在我的情况下使用它可能是最好的:
What is the correct way to initialize a
HashMap
? I think it might be best in my situation to use:
HashMap x = new HashMap();
但 Eclipse 一直建议我使用:
But Eclipse keeps suggesting that I use:
HashMap<something, something> map = new HashMap();
哪个更好?
HashMap
可以保存不同类型的对象/数据类型作为值吗?例如,这是否可行并且可以:
Can a HashMap
hold different types of objects/data types as values? For example, would this work and be OK:
map.put("one", 1);
map.put("two", {1, 2});
map.put("three", "hello");
在第一个 put()
中,我想要一个 int
作为值,第二个是 int[]
,第三个是细绳.在 Java 中使用 HashMap
可以这样做吗?另外,是否可以将 HashMap
作为值存储在 HashMap
中?
In the first put()
, I want an int
as a value, in the second an int[]
, and third a string. Is this okay to do in Java with HashMap
s? Also, is it okay to store a HashMap
as a value within a HashMap
?
推荐答案
这真的取决于你需要什么样的类型安全.非泛型的做法最好如下:
It really depends on what kind of type safety you need. The non-generic way of doing it is best done as:
Map x = new HashMap();
请注意,x
被键入为 Map
.这使得将来更改实现(到 TreeMap
或 LinkedHashMap
)变得更加容易.
Note that x
is typed as a Map
. this makes it much easier to change implementations (to a TreeMap
or a LinkedHashMap
) in the future.
您可以使用泛型来确保一定程度的类型安全:
You can use generics to ensure a certain level of type safety:
Map<String, Object> x = new HashMap<String, Object>();
在 Java 7 及更高版本中,您可以这样做
In Java 7 and later you can do
Map<String, Object> x = new HashMap<>();
以上内容虽然更详细,但避免了编译器警告.在这种情况下,HashMap
的内容可以是任何Object
,所以可以是Integer
,int[]
等,这就是你正在做的事情.
The above, while more verbose, avoids compiler warnings. In this case the content of the HashMap
can be any Object
, so that can be Integer
, int[]
, etc. which is what you are doing.
如果您仍在使用 Java 6,Guava 库(虽然这很容易足够自己做)有一个名为 newHashMap()
避免了在执行 new
时需要复制通用类型信息.它从变量声明中推断出类型(这是 Java 7 之前的构造函数中不可用的 Java 特性).
If you are still using Java 6, Guava Libraries (although it is easy enough to do yourself) has a method called newHashMap()
which avoids the need to duplicate the generic typing information when you do a new
. It infers the type from the variable declaration (this is a Java feature not available on constructors prior to Java 7).
顺便说一句,当您添加一个 int 或其他原语时,Java 会自动装箱它.这意味着代码相当于:
By the way, when you add an int or other primitive, Java is autoboxing it. That means that the code is equivalent to:
x.put("one", Integer.valueOf(1));
您当然可以将 HashMap
作为值放在另一个 HashMap
中,但我认为如果您以递归方式执行此操作(即放入 HashMap
本身就是一个值).
You can certainly put a HashMap
as a value in another HashMap
, but I think there are issues if you do it recursively (that is put the HashMap
as a value in itself).
这篇关于初始化HashMap的正确方法,HashMap可以保存不同的值类型吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:初始化HashMap的正确方法,HashMap可以保存不同的值
基础教程推荐
- FirebaseListAdapter 不推送聊天应用程序的单个项目 - Firebase-Ui 3.1 2022-01-01
- 降序排序:Java Map 2022-01-01
- 减少 JVM 暂停时间 >1 秒使用 UseConcMarkSweepGC 2022-01-01
- 无法使用修饰符“public final"访问 java.util.Ha 2022-01-01
- 设置 bean 时出现 Nullpointerexception 2022-01-01
- Java Keytool 导入证书后出错,"keytool error: java.io.FileNotFoundException &拒绝访问" 2022-01-01
- 如何使用 Java 创建 X509 证书? 2022-01-01
- “未找到匹配项"使用 matcher 的 group 方法时 2022-01-01
- Java:带有char数组的println给出乱码 2022-01-01
- 在 Libgdx 中处理屏幕的正确方法 2022-01-01