相当于Python字典的Java


93

我是Python的长期用户,并且非常喜欢使用字典的方式。它们非常直观且易于使用。有没有一个与python字典等效的Java?我听说有人在使用哈希图和哈希表。有人可以解释使用哈希表和哈希图与python字典的异同吗?

Answers:


106

Python的dict类是Python文档非正式地称为“ 映射类型 ”的实现。在内部,dict使用哈希表实现。

Java的HashMap类是Map接口的实现。在内部,HashMap使用哈希表实现。

语法上有一些细微的差异,我相信实现的调整会稍有不同,但是总体而言,它们是完全可以互换的。


40
没有提供示例:(
Kamran Bigdely

1
@kami:您想要什么样的例子?
丹尼尔·普赖登16/09/14

5
任何示例都可以说明python在字典中的Java等效功能。一个有用的答案包括一些示例,因为大多数人来这里都是为了查看示例并在代码中使用它们。
Kamran Bigdely

13
@kami:我认为那是不对的。问题不问“对于某些特定的Python代码,等效的Java代码是什么”。实际上,该问题根本不包含任何代码。我不确定在Java中添加使用Map API的示例的价值是什么;该答案已经链接到规范文档。如果要学习Java,请从教程而不是Stack Overflow开始。我当然不认为仅凭缺少可粘贴复制代码的示例就可以接受这个答案。
丹尼尔·普赖登16/09/14

4
悲伤,就阅读评论说:“大多数人来这里看的例子和在他们的代码中使用它们 ”,我希望这是错误的。
0xc0de

31

字典和地图的想法相似。两者都包含类似的元素

key1:value1, key2:value2 ... and so on

在Java中,Map实现的方式不同,例如HashMapTreeMap等。put(), get()操作类似

import java.util.HashMap;

Map map = new HashMap();
// Put elements to the map
map.put("Ram", new Double(3434.34));
map.put("Krishna", new Double(123.22));
map.put("Hary", new Double(1378.00));
//to get elements
map.get("Krishna"); # =123.22
map.get("Hary"); # = 1378.00 

请参阅java8中的HashMap文档https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html


5

据我所知(我实际上并不使用Java),字典只是hashmap / hashtable的别称。

可以从http://www.fluffycat.com/Java/HashMaps/获取代码,似乎它们的使用方式非常相似,并带有一些额外的Java样板。


3
Java甚至具有由Hashtable实现的Dictionary接口。不过,通常首选HashMap。
迈克尔·迈尔斯

1
@Michael Myers:不推荐使用字典,Oracle建议使用Map代替docs.oracle.com/javase/7/docs/api/java/util/Dictionary.html
Broken_Window

5

两者之间的区别是,dict对于哪些数据类型可以用作密钥有更严格的要求。Java将允许任何对象充当键-尽管您应注意确保对象的hashCode()方法返回反映其内部状态的唯一值。Python需要一些键来使其符合其hashable的定义,该定义指定对象的哈希码在其生命周期内绝不应更改。


1
的确如此,但是这两种语言实际上都没有实施。显然,无论是在Java hashCode()方法中还是在Python __hash__()方法中,您都应尝试返回反映内部状态的唯一值。在Java或Python中,如果您具有可变对象,则它可能不应该是哈希表键,因此从hashCode()or __hash__()方法中引发异常是有意义的。
丹尼尔·普里登

1
以我的经验,Python中几乎所有内容都可以是字典键……“限制条件”是什么?
罗恩·卡利安
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.