Java 中的 ArrayList 与 Python 中的 List
Posted
技术标签:
【中文标题】Java 中的 ArrayList 与 Python 中的 List【英文标题】:ArrayList in Java vs List in Python 【发布时间】:2016-03-02 21:23:50 【问题描述】:为什么 Java 中的 ArrayList 是可散列的,而 Python 中的 List 不是。它只是基于开发人员或语言语义的选择。
我认为 Python 不允许列表是可散列的,因为它是可变的,因此散列可以在对象的生命周期内发生变化。
Java 允许它是好特性还是坏特性。
public class Test
public static void main(String[] args)
ArrayList<String> list = new ArrayList<String>();
list.add("hello");
System.out.println(list.hashCode());
工作正常,而下面不行
>>> l = ["hello"]
>>> l.__hash__()
Traceback (most recent call last):
File "<pyshell#103>", line 1, in <module>
l.__hash__()
TypeError: 'NoneType' object is not callable
【问题讨论】:
请告诉我们为什么投反对票 我尝试编辑您的问题,使其不那么随意和模糊。不要责怪 我 进一步投反对票。 【参考方案1】:您说 Python 中的列表不可散列是正确的,因为 Python 不允许可变数据成为字典的键。
Java ArrayLists 是可散列的,因为Java 一方面没有任何语言级别的不变性支持,另一方面则强制所有对象都是可散列的。哈希是否“有用”取决于类的实现。
我认为“故事”只是 Python 对字典具有语言级别的支持,并围绕此做出了一些设计决策,而 Java 没有。
虽然 Python 是“弱类型”for some definition of "weakly,",但您不应该推断 Python 是编程语言的狂野西部,一切都没有内置安全性。那将是 Perl 或 javascript。
【讨论】:
我不明白您所说的语言级别支持是什么意思,Java 中也有字典。 @User 它是 java 8 的特性吗?如果是这样,那么将我的答案更改为“通过 Java 7”,如果不是,那么没有。 Python 是强类型的。 @User ericlippert.com/2012/10/15/… @User 字典是 Python 语言的一部分(例如 kwargs)。 Java 有HashMap
和Hashtable
,但这些只是类。没有需要它们的特殊语法或语言功能。以上是关于Java 中的 ArrayList 与 Python 中的 List的主要内容,如果未能解决你的问题,请参考以下文章
Java - 将 ArrayList 中的字符串与 .txt 文件中的所有文本进行比较