【问题标题】:Reallocating array size using type of its element使用其元素的类型重新分配数组大小
【发布时间】:2017-02-09 06:36:09
【问题描述】:

我有一个类属性,它是一个 Anytype 内置数组。在某些时候我需要重新分配它的内存以使其翻倍,但由于它是Anytype,我不能这样做

myArray = new Anytype[myArray.length * 2];

由于数组已经定义好了,我可以访问它的元素类:

myArray[0].getClass();

我的问题是:我可以使用我知道数组的类这一事实来重新分配它吗?我知道我可以使用 Java utils 中的Arrays.copyOf,但我想知道是否可以在知道对象所需大小的情况下重新分配,一种 C 方式

myArray = new myArray[0].getAllocationNeeded()[myArray.length * 2];

P.S:我不确定标题是否相关,如果您有更清楚的内容,请指出我

【问题讨论】:

  • 您想要一个动态长度数组?看看ArrayList
  • "我做不到:myArray = new Anytype[myArray.length * 2]" => 为什么?这正是它的完成方式。元素类型与数组大小有什么关系?
  • @AndrewTobilko 那么对 new 数组的引用必须分配给另一个变量,然后您才能复制内容。这个问题不清楚!
  • @UlysseBN 您似乎认为类型(这里:AnyType)对数组的大小有任何影响。 它没有!如果你已经尝试了一些东西但失败了,你必须把它放到你的问题中。
  • 您可能还在用 C 思考。在 Java 中,数组类型的大小与数组的大小无关,因为数组只包含对数组的 引用元素。您永远不会像在 C 中那样将数字元素乘以元素的大小。

标签: java arrays allocation


【解决方案1】:

是的,像这样(假设源不为空或为空):

   public <T> T[] resizeArray(T[] source, int multiplier) {
    T[] newArray = (T[]) Array.newInstance(source.getClass().getComponentType(), source.length * multiplier);
    System.arraycopy(source, 0, newArray, 0, source.length);
    return newArray;
}

两者:

  • source.getClass().getComponentType()
  • myArray[0].getClass()

返回元素类。

【讨论】:

  • 谢谢,根据 cmets 的说法,这可能不是我想要的,但这绝对是我认为我会得到的。我希望你的反对者能解释自己,所以如果有问题,我们就会知道。
  • 好的,既然我解决了我的问题,我可以接受你的回答:我用过。而且我还使用this answer 进行数组初始化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
  • 1970-01-01
  • 2015-05-06
  • 1970-01-01
相关资源
最近更新 更多