Java 等价于 Python 字典

Posted

技术标签:

【中文标题】Java 等价于 Python 字典【英文标题】:Java Equivalent to Python Dictionaries 【发布时间】:2010-12-05 04:04:00 【问题描述】:

我是 Python 的长期用户,非常喜欢字典的使用方式。它们非常直观且易于使用。有没有一个好的 Java 相当于 python 的字典?我听说有人使用哈希图和哈希表。谁能解释一下使用 hashtables 和 hashmaps 与 python 字典的异同?

【问题讨论】:

【参考方案1】:

据我所知(我实际上并不使用 java)字典只是 hashmap/hashtable 的另一个名称。

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

【讨论】:

Java 甚至还有一个由 Hashtable 实现的 Dictionary 接口。不过,HashMap 通常是首选。 @Michael Myers : Dictionary 已弃用,Oracle 建议使用 Map 代替 docs.oracle.com/javase/7/docs/api/java/util/Dictionary.html【参考方案2】:

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

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

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

【讨论】:

未提供示例 :( @kami:你想要什么样的例子? 任何说明一个 java 等效的 python 字典的例子。一个有用的答案包括一些示例,因为大多数人来这里查看示例并在他们的代码中使用它们。 @kami:我认为这不对。这个问题没有问“某些特定 Python 代码的等效 Java 代码是什么”。事实上,这个问题根本不包含任何代码。我不确定在 Java 中添加使用 Map API 的示例的价值是什么;这个答案已经链接到规范文档。如果您想学习 Java,请从教程开始,而不是 Stack Overflow。我当然不认为这个答案仅仅因为它缺少可复制粘贴的代码示例而被否决。 很遗憾看到那条评论说“大多数人来这里查看示例并在他们的代码中使用它们”,我希望这是错误的。【参考方案3】:

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

【讨论】:

这是真的,但实际上这两种语言都没有强制执行。显然,在 Java hashCode() 方法或 Python __hash__() 方法中,您应该尝试返回反映内部状态的唯一值。在 Java 或 Python 中,如果您有一个可变对象,它可能不应该是哈希表键,因此从 hashCode()__hash__() 方法抛出异常是有意义的。 根据我的经验,Python 中的几乎所有内容都可以作为 dict 键......“更严格的要求”是什么?【参考方案4】:

dictionary 和 Map 的思想类似。两者都包含像

这样的元素
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

【讨论】:

Java 中的注释是//,而不是# :)

以上是关于Java 等价于 Python 字典的主要内容,如果未能解决你的问题,请参考以下文章

Python 等价于 Java StringBuffer?

Dart 中这个 python 字典的等价物是啥?

Python字典循环与字典排序

python3字典遍历

Python Java forEach 等价物

python中函数调用定义时星号的含义(*列表,**字典)