2009-10-08 86 views
73

我是Python的长期用户,非常喜欢使用字典的方式。它们非常直观,易于使用。是否有相当于Python的字典的Java?我听说过使用hashmaps和hashtables的人。有人可以解释使用哈希表和hashmaps与Python的字典的相似之处和不同之处吗?Java相当于Python字典

回答

72

Python的dict类是Python文档非正式地称为“mapping types”的实现。在内部,dict是使用散列表实现的。

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

在语法上有一些细微的差异,我相信实现的调整方式稍有不同,但总的来说它们是完全可以互换的。

+9

没有提供示例:( – 2016-09-13 22:07:51

+1

@kami:你想要什么样的例子? – 2016-09-14 03:40:05

+1

任何一个例子都说明了python字典在运行中的java等价物,一个有用的答案包含了一些例子,因为大多数人来这里看例子并在他们的代码中使用它们 – 2016-09-14 16:26:16

3

据我所知(我实际上没有使用java)字典只是hashmap /哈希表的另一个名称。

http://www.fluffycat.com/Java/HashMaps/获取代码似乎他们以非常相似的方式使用,有一点额外的Java锅炉板。

+2

的Java甚至有一个由Hashtable实现的Dictionary接口。虽然HashMap通常是首选。 – 2009-10-08 21:48:05

+0

@Michael Myers:字典已被弃用,Oracle建议使用Map来代替http://docs.oracle.com/javase/7/docs/api/java/util/Dictionary.html – 2015-03-26 16:02:36

4

这两者之间的一个区别是dict对于哪些数据类型可以充当关键字有更严格的要求。 Java将允许任何对象作为一个键 - 虽然你应该注意确保该对象的方法返回一个反映其内部状态的唯一值。 Python需要密钥来适应其hashable的定义,该定义指定对象的哈希代码在其生命周期内绝不应该改变。

+1

这是真的,但它并没有被两种语言实际执行。显然,在Java'hashCode()'方法或Python'__hash __()'方法中,您应该尝试返回反映内部状态的唯一值。无论是Java还是Python,如果你有一个可变对象,它可能不应该是一个散列表键,所以从'hashCode()'或'__hash __()'方法抛出一个异常是有意义的。 – 2009-10-09 21:57:41

10

字典和地图的想法是相似的。两者都包含像

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

在Java元素,Map实现不同的方式像HashMap,或TreeMapput(), get()操作类似于

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 

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