【问题标题】:ArrayList in Java vs List in PythonJava 中的 ArrayList 与 Python 中的 List
【发布时间】: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

【问题讨论】:

  • 请告诉我们为什么投反对票
  • 尝试编辑您的问题,使其不那么随意和模糊。不要责怪 进一步投反对票。

标签: java python arraylist


【解决方案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 字典是 Python 语言的一部分(例如 kwargs)。 Java 有HashMapHashtable,但这些只是类。没有需要它们的特殊语法或语言功能。
猜你喜欢
  • 1970-01-01
  • 2011-01-19
  • 2015-07-30
  • 2011-01-29
  • 2015-08-11
  • 1970-01-01
  • 2019-01-12
  • 2010-09-28
相关资源
最近更新 更多