java - Java 中的 ArrayList 与 Python 中的列表

标签 java python arraylist

为什么 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/

相关文章:

java - 如何根据服务器时间操作mySQL中的参数

java : Arrange and retrieve data using HashMap and List

java - ArrayList 无法正确保存对象(N Queens 示例)

java - 替换为ArrayList

python - Django 和 virtualenv - 添加到 git repo

java - 列表列表中的堆算法实现

java - 引用匿名类?

java - 使用 new 语句将值传递给构造函数

Python 无法连接到 MySQL 数据库 : OperationalError

python - 为什么这不会陷入无限循环?