Ton*_*ark 63 java standards hashmap
所以我HashMap
在Java中有两个关于s的问题:
初始化一个正确的方法是HashMap
什么?我认为在我的情况下使用可能是最好的:
HashMap x = new HashMap();
Run Code Online (Sandbox Code Playgroud)
但Eclipse一直建议我使用:
HashMap<something, something> map = new HashMap();
Run Code Online (Sandbox Code Playgroud)
哪个更好?
可以HashMap
将不同类型的对象/数据类型保存为值吗?例如,这会工作并且没问题:
map.put("one", 1);
map.put("two", {1, 2});
map.put("three", "hello");
Run Code Online (Sandbox Code Playgroud)
在第一个中put()
,我想要int
一个值作为值,在第二个中int[]
,第三个是字符串.用HashMap
s 做Java可以吗?另外,可以将a HashMap
作为值存储在一个HashMap
?
Yis*_*hai 102
这取决于您需要何种类型的安全性.这种非通用的方式最好如下:
Map x = new HashMap();
Run Code Online (Sandbox Code Playgroud)
请注意,x
键入为Map
.这使得将来更改实现(更改为a TreeMap
或a LinkedHashMap
)变得更加容易.
您可以使用泛型来确保某种级别的类型安全:
Map<String, Object> x = new HashMap<String, Object>();
Run Code Online (Sandbox Code Playgroud)
在Java 7及更高版本中,您可以这样做
Map<String, Object> x = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)
以上虽然更详细,但避免了编译器警告.在这种情况下的内容HashMap
可以是任意Object
,这样可以Integer
,int[]
等这是你在做什么.
如果您仍在使用Java 6,Guava Libraries(虽然它很容易自己完成)有一个方法newHashMap()
,可以避免在执行时复制通用类型信息new
.它从变量声明中推断出类型(这是Java 7之前的构造函数上不可用的Java特性).
顺便说一下,当你添加一个int或其他原语时,Java就会自动添加它.这意味着代码相当于:
x.put("one", Integer.valueOf(1));
Run Code Online (Sandbox Code Playgroud)
你当然可以将一个HashMap
值作为一个值放在另一个值中HashMap
,但我认为如果你以递归方式执行它会有问题(这就是把它HashMap
作为一个值本身).
MBC*_*ook 14
这是使用Java 1.5进行的更改.你首先列出的是旧的方式,第二种是新的方式.
通过使用HashMap,您可以执行以下操作:
HashMap<String, Doohickey> ourMap = new HashMap<String, Doohickey>();
....
Doohickey result = ourMap.get("bob");
Run Code Online (Sandbox Code Playgroud)
如果您在地图上没有类型,则必须执行以下操作:
Doohickey result = (Doohickey) ourMap.get("bob");
Run Code Online (Sandbox Code Playgroud)
这真的非常有用.它可以帮助您捕获错误并避免编写各种额外的演员表.这是我最喜欢的1.5(和更新)功能之一.
您仍然可以在地图中放置多个内容,只需将其指定为Map,然后您可以将任何对象放入(String,另一个Map和Integer,以及三个MyObjects,如果您愿意的话).