2013-07-17 59 views
0

如何创建一个自我扩展的数组。我不想使用类似ArrayListVector等来做到这一点。相反,我需要生成一个数组,通过向它添加元素来扩展它的大小。这是我老师的问题。如何创建一个动态扩展自己的数组?

说例如,我想要一个int[]它扩大它的大小。

例如,用户想要将学生ID输入到数组中。该阵列没有固定的大小,因为没有固定的大小。在这种情况下的学生。当用户说他想再多一次时,数组的大小应该加1。

任何答案表示赞赏。

+0

不使用容器类是老师问题的一部分吗? [这](http://stackoverflow.com/questions/7313628/resizing-an-array)可能会有所帮助 – lelloman

+0

你描述的是不可能的:(一)无论是你的老师不知道他在说什么,或(ii )你误解了他所要求的。例如,他可能会要求您创建一个带有数组的内部类,并在添加新项目时创建一个新的(较大的)数组。 – assylias

+0

**为什么**不想使用'ArrayList'?这完全是**为什么收藏。通过丢弃这些工具,你会*重新发明轮子(通常很糟糕)。 –

回答

3

数组的长度是固定的,你不能增加或减少数组的大小。

你可以做什么创建更大尺寸的新阵列,并使用Arrays#copyOf源阵列将值复制到新的目标阵列。

注意:Arrays#copyOf内部调用System.copy它做浅拷贝。

+0

我已经说过,回答我的老师,她说这只是一个普遍的答案!她反过来问,如果我想要超过限额? –

+0

数组固定长度,你不能增加它 –

+2

@SayOff把你的老师带到这里!我们需要谈谈...... – Maroun

0

无论你的老师说什么都没有办法动态调整数组的大小,而无需创建一个具有编辑大小的新数组。我认为任何语言都不支持这个要求。只需创建一个新阵列并复制现有阵列。

+1

那么,C(至少在Unix上)有'realloc',所以你当然可以改变已经请求的内存的大小。 –

+0

@JoachimSauer啊感谢兄弟。我不知道。感谢分享 –

1

你的描述'当用户说他想再多一次时,数组的大小应该加1。只是一个指针数组,它是java中的LinkedList。

2

这里是您的老师useful link,从文档:

数组是保持值 单一类型的的固定数量的容器对象。当创建数组 时,将建立阵列的长度。创建后,其长度固定为

的选择,并且不用ArrayList/Vector ..创造一个新的数组和复制的值给它。

+0

我只需展示这一点!我只是在等待她的回答? –

0

我想我要到数组用递增的尺寸重新初始化,但在这之前,我想我会拥有所有这些元素复制到一个临时数组,然后再次将它们复制到原来的大小的数组被改变。

如果这是正确的,我的老师可能正在寻找这个。但是,这会降低性能。