如何使用Java实现类似数组的数据结构?

时间:2015-02-02 09:52:09

标签: java arrays data-structures

我知道什么是数组以及如何使用它们。但是,我不知道它们是如何实现的。我试图弄清楚我是否可以尝试使用Java实现类似数组的数据结构,但我不能。

我在线搜索但没有找到任何有用的东西。

甚至可以在Java中实现类似数组的数据结构吗?是否可以用其他语言?如果是这样的话(当然没有使用数组)?

编辑:我想知道的是如何在不使用数组的情况下实现数组数据结构?

3 个答案:

答案 0 :(得分:10)

数组是内存中的连续部分,因此要创建数组,您需要保留一块大小为n * sizeof(type)的内存块,其中n是您要存储的项目数量并且sizeof(type)将返回JVM需要表示给定类型的大小(以字节为单位)。

然后你会将一个引用(指针)存储到内存段的第一个位置,比如说0x00,然后你用它作为基础来知道你需要多少移动以访问元素,因此a[n]等于执行0x00 + (n * sizeof(type))

尝试在Java中实现此问题的问题是Java不允许指针操作,所以我不认为构建自己的数组类型是可能的,因为你不能达到那个级别

话虽如此,您应该能够创建一个链接数据结构,其中nth元素指向(n + 1)th元素。

您应尝试其他语言的其他问题,例如C#(检查unsafe操作),C++C

  1. 据我所知,Java没有sizeof函数(参见this)。
  2. Java不允许operator overloading。因此,您无法定义自己的索引运算符,例如[index]。您可能需要执行array.getElementAt(0)之类的操作才能获得第一个元素。
  3. 正如@ug_推荐的那样,你可以看一下Unsafe类。但正如他所推荐的那样,我认为你不应该用一种具有指针抽象作为其核心思想之一的语言进行指针运算。

答案 1 :(得分:0)

如果您想要的是这样的话:

MyArray ma = new MyArray(length);
ma[0] = value;

然后你不能用Java做这个,但你可以用其他语言做。寻找“运营商重载”。

答案 2 :(得分:0)

我想知道你是否考虑了结构,向量或链接列表。这些都与数组相似但不同。

结构不是真的在java中,但你可以实现它们。

在此处阅读Structs: www.cplusplus.com/doc/tutorial/structures /

java中使用的示例结构: Creating struct like data structure in Java

我认为你真正想要的是矢量。它们与数组非常相似,但它们不是一个数组。

矢量信息: www.cplusplus.com/reference/vector/vector /

与vector相比较的数组: https://softwareengineering.stackexchange.com/questions/207308/java-why-do-we-call-an-array-a-vector

我推荐一个链接列表。它有点像阵列的想法,但不知道你的确切大小。它更容易实现。

链接列表: en.wikipedia.org/wiki/Linked_list

所有这些都归结为他们需要什么的情况。说,“我想知道的是如何在不使用数组的情况下实现数组数据结构?”有点开放。