【问题标题】:How to create an array that extends itself dynamically?如何创建一个动态扩展自身的数组?
【发布时间】:2013-07-17 10:52:05
【问题描述】:

如何创建一个扩展自身的数组。我不想使用 ArrayListVector 等类来执行此操作。相反,我需要生成一个数组,在向其中添加元素时扩展它的大小。这是我老师的问题。

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

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

感谢任何答案。

【问题讨论】:

  • 不使用容器类是您老师问题的一部分吗? this 可能会有所帮助
  • 您所描述的不可能:(i)您的老师不知道他在说什么,或者(ii)您误解了他的要求。例如,他可能会要求您创建一个包含数组的类,并在添加新项目时创建一个新的(更大的)数组。
  • 为什么你不想使用ArrayList?这正是正是收集的目的。通过丢弃这些工具,你必然重新发明轮子(通常很糟糕)。
  • @JoachimSauer 实际上这不是我的问题。我不明白她为什么也问我这样的问题! ;)
  • @SayOff:然后回到你的老师那里。我能想到的唯一有意义的事情是,您的老师几乎要求您重新实现ArrayList 作为练习。这是有道理的,但请记住,这只是为了学习,通常没有其他理由这样做。

标签: java arrays int


【解决方案1】:

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

您可以做些什么来创建更大尺寸的新数组并使用Arrays#copyOf 源数组将值复制到新的目标数组。

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

【讨论】:

  • 我已经和老师说了这个答案,她说这只是一个普通的答案!她反过来问如果我想要超过限制怎么办?
  • 数组长度固定,不能增加
  • 内部 ArrayList 或 vector 也是如此
  • 换一种说法:您可以生成行为类似于数组并具有所需功能的东西(该东西最终看起来与ArrayList非常相似,然而),但你不能用一个真正的数组来做你被问到的事情。
  • @MarounMaroun 她可能会骂我,我实际上把这些搞砸了 4 天,如果她知道我在这里问,她可能会降低我的分数!她可能不知道SO! ;)
【解决方案2】:

这是来自文档的useful link,供您的老师使用:

数组是一个容器对象,包含固定数量的值 单一类型的。数组的长度是在数组的时候建立的 被建造。创建后,长度固定

没有ArrayList/Vector.. 的唯一选项是创建一个新数组并将值复制到其中。

【讨论】:

    【解决方案3】:

    您的描述,“当用户说他想要一个时,数组的大小应该增加一。”只是一个指针数组,在java中就是LinkedList。

    【讨论】:

      【解决方案4】:

      无论您的老师说什么,如果不创建具有已编辑大小的新数组,就无法动态调整数组大小。我认为没有任何语言支持这个要求。只需创建一个新数组并复制现有数组即可。

      【讨论】:

      • 嗯,C(至少在 Unix 上)有realloc,所以你当然可以改变已经请求的内存大小。
      • @JoachimSauer 啊谢谢老兄。我不知道。感谢分享
      【解决方案5】:

      我想我必须用递增的大小重新初始化数组,但在此之前,我想我必须将所有这些元素复制到一个临时数组中,然后再次将它们复制到大小为的原始数组中改变了。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-08-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多