如何在java中实现原始数组?

时间:2013-04-23 22:54:16

标签: java arrays algorithm

在S.O.上有几个与此类似的问题,但它们并没有完全回答代码实现的问题。我看了

Why isn't there a java.lang.Array class? If a java array is an Object, shouldn't it extend Object?

How are arrays implemented in java?

他们没有回答具体实施的内容。

我已经从OpenJDK下载了java源码,我真的找不到我要找的东西。 (也许这部分代码是专有的?)

  1. 如何完成追加/插入?
  2. 如何检索数据?例如,如果我调用my_arr[500]实现的算法是什么,以获得索引500处的值?
  3. 如何删除?
  4. 提前致谢!

3 个答案:

答案 0 :(得分:5)

阵列上没有附加,插入或删除。

合理实现中my_arr[500]的地址将是对象的基地址,加上标题的小偏移量,加上数组元素大小的500倍。显然你需要进行范围检查 - 偏移需要是非负的并且小于数组的长度(存储在标题中)。

答案 1 :(得分:2)

我会说与CC++

相同

当我们int a[10];Object obj[10];时 编译器分配的内存块等于10*sizeOf(int)10*sizeOf(Object) 内存块中第一个位置的地址存储在a中。所以基本上a成了指针。注意Java internally uses Pointers

然后每当我们尝试访问a[5]时,地址都被计算为指针arithematic。

a+5*(sizeOf(int))obj+5*(sizeOf(Object))然后将sizeOf(int)sizeOf(Object)个字节作为值

答案 2 :(得分:0)

  1. my_arr [1] =“whatevs”;这会将数组中的第一个元素设置为whatevs。

  2. System.out.print(my_arr [500]); // my_arr [#]是数组中元素500的内存位置,调用它来获取存储在那里的任何信息。 (实际上500个元素将超出界限,你要寻找的元素是499.因为数组总是从0开始并且达到它们的设定值-1)

  3. 3.要删除信息,您可以执行其中一项操作,但将其设置为“null”或复制数组,只需省略您不想包含的部分。

    您将使用一种方法在程序中执行所有这些操作以呈现另一种效果。真正需要理解的是,数组中的每个元素都可以是对象或原语,即。数字值,如10。

    如果所有这些对您来说都是基本的,那么您需要更准确地解决您的问题,或者只是解释您尝试使用数组做什么。