我了解 Java,最近也开始学习 Python。有一次我明白我需要暂停一下并澄清与数据结构相关的所有问题,尤其是列表、数组和元组。如果我有以下任何错误,请您纠正我:
- 最初,根据数据结构标准,列表不 支持任何类型的索引。访问的唯一方法 元素是通过迭代(下一个方法)。
- 在 Java 中,实际上有一种通过索引访问元素的方法(即 get(index) 方法),但即使您使用这些与索引相关的方法,它仍然从第一个元素(或更具体地说是它的引用)开始迭代)
- Python 中有一种方法可以像 Java 中的数组一样访问列表元素,使用 list[index] 语法,但实际上,即使这种数据类型称为“列表”,我们也有一个数组例如,当我们引用第三个元素时,我们直接引用数组中的第 3 个元素来获取引用,而不需要从第一个元素进行迭代(我很确定我在这里错了)
- 元组的实现方式与 Python 中的列表相同。唯一的区别是它们是不可变的。但它仍然比数组更接近列表,因为元素在内存中并不连续。
- 不像 Python 那样有数组
- 在数据结构理论中,当我们创建数组时,它仅使用对内存第一个单元的引用,然后迭代到我们指定为索引的元素数。列表和数组之间的主要区别在于所有元素都连续位于内存中,这就是我们在性能方面获胜的原因。
我很确定我在某个地方错了。你能纠正我吗? 谢谢
最佳答案
大部分都是错误的。
- list abstract data type是元素的有序序列,允许重复。有很多方法可以实现此数据类型,特别是作为 linked list ,但大多数编程语言使用 dynamically resized arrays .
- 甚至链接列表也可以支持索引。实现无法直接跳到第 n 个元素,但它可以通过链接到达那里。
- Java 的 List type 不指定实现,只指定接口(interface)。 ArrayList type是一个用动态数组实现的List; Linkedlist正如其名称所示。
- Python 的列表是通过动态调整大小的数组来实现的。 Python 的元组是用固定大小的数组实现的。
- 实际上有两种通常称为数组的 Python 类型,这还不包括新手常见的使用“数组”来引用 Python 列表的情况。有
array
提供的数组模块,有NumPy的ndarray
。 - 当您对数组进行索引时,实现不会从第一个元素的位置迭代到第 n 个元素。它向数组地址添加一个偏移量,以便直接跳到该元素,而无需迭代。
关于java - Java 和 Python 中的数据结构及其实现 : Lists, 数组、元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22124831/