为什么 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
最佳答案
您说 Python 中的列表不可哈希是正确的,因为 Python 不允许可变数据作为字典的键。
Java ArrayLists 是可散列的,因为 Java,一,没有任何语言级的不变性支持,二是强制所有对象都是可散列的。哈希是否“有用”取决于类的实现。
我认为“故事”只是 Python 具有对字典的语言级支持并围绕此做出了一些设计决策,而 Java 没有。
虽然 Python 是“弱类型”for some definition of "weakly,"你不应该推断 Python 是编程语言的狂野西部,在那里一切都没有内置的安全性。那将是 Perl 或 Javascript。
关于java - Java 中的 ArrayList 与 Python 中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33978318/