【问题标题】:Data Structures in Java & Python and their implementations: Lists, Arrays, TuplesJava 和 Python 中的数据结构及其实现:列表、数组、元组
【发布时间】:2014-03-02 06:59:39
【问题描述】:

我知道 Java,最近也开始学习 Python。有一次我明白我需要停下来澄清所有与数据结构相关的问题,尤其是列表、数组和元组。如果我在以下任何一项中有错误,请您纠正我:

  • 最初,根据数据结构标准,列表不 支持任何类型的索引。获得访问权限的唯一方法 元素是通过迭代(下一个方法)。
  • 在 Java 中实际上有一种方法可以通过索引来访问元素(即 get(index) 方法),但即使您使用这些与索引相关的方法,它仍然会从第一个元素(或者更具体地说是它的引用)进行迭代)
  • 当我们在 Java 中处理数组时,Python 中有一种方法可以访问 Lists 元素,使用 list[index] 语法,但实际上,即使这种数据类型称为“lists”,我们确实有一个数组在后台引用,当我们引用第三个元素时,例如,我们直接引用数组中的第 3 个元素来获取引用,而无需从第一个元素迭代(我很确定我在这里错了)
  • 元组的实现方式与 Python 中的列表相同。唯一的区别是它们是不可变的。但它仍然比数组更接近列表,因为元素在内存中不是连续定位的。
  • 没有像 Python 那样的数组
  • 在数据结构理论中,当我们创建一个数组时,它只使用对第一个内存单元的引用,然后迭代到我们指定为索引的元素的#。 Lists 和 Arrays 的主要区别在于所有元素都在内存中连续定位,这就是我们在性能方面获胜的原因。

我很确定我在某个地方错了。你能纠正我吗? 谢谢

【问题讨论】:

  • 主要问题是您实际上在谈论三种数据结构。链表、数组和动态数组。 Python 列表是一个动态数组。我建议您查看每个维基百科页面以获得概览。
  • 谢谢。是的,我不是在谈论语言。那是关于数据结构的问题。

标签: java python arrays list tuples


【解决方案1】:

大部分都是错误的。

  • list abstract data type 是一个有序的元素序列,允许重复。有很多方法可以实现这种数据类型,特别是作为linked list,但大多数编程语言使用dynamically resized arrays
  • 甚至链表也可以支持索引。实现无法直接跳到第 n 个元素,但它可以通过链接到达那里。
  • Java 的List 类型不指定实现,只指定接口。 ArrayList 类型是一个用动态数组实现的 List; Linkedlist 正是它的名字。
  • Python 的列表是通过动态调整大小的数组实现的。 Python 的元组是用固定大小的数组实现的。
  • 实际上有两种 Python 类型通常称为数组,这还不包括新手常用的“数组”来指代 Python 列表。有array模块提供的数组,还有NumPyndarrays。
  • 索引数组时,实现不会从第一个元素的位置迭代到第 n 个元素。它在数组的地址上添加一个偏移量以直接跳到元素,而无需迭代。

【讨论】:

  • 谢谢,听起来不错。当我谈论“实现”时,我并不是指 java'a 接口和实现。所以前3个子弹对我来说很清楚。 Python 的数组列表争议也是如此。如果总结一下我的理解,Python的列表和元组是用“数组”在数据结构理解中实现的吗?一个是动态调整大小的,另一个是固定的?并且访问数组中的元素不涉及迭代?它使用偏移量+第一个元素的位置?
猜你喜欢
  • 2013-05-25
  • 2020-02-21
  • 2012-09-19
  • 2020-04-20
  • 2019-05-13
  • 2017-10-11
  • 2021-02-14
  • 1970-01-01
相关资源
最近更新 更多