当前位置: 首页 > 面试题库 >

Java动态数组大小?

孔正文
2023-03-14
问题内容

我有一个类-xClass,我想将其加载到xClass数组中,所以我声明了:

xClass mysclass[] = new xClass[10];
myclass[0] = new xClass();
myclass[9] = new xClass();

但是,我不知道是否需要10。为此,我可能需要8或12或任何其他数字。我要等到运行时才能知道。我可以即时更改数组中元素的数量吗?如果是这样,怎么办?


问题答案:

不,一旦创建,就无法更改数组的大小。你要么必须分配比你认为需要的更大的大小,要么接受必须重新分配它的开销,这需要增加它的大小。这样做时,你将不得不分配一个新的数据,并将数据从旧数据复制到新数据:

int oldItems[] = new int[10];
for (int i=0; i<10; i++) {
  oldItems[i] = i+10;
}
int newItems[] = new int[20];
System.arraycopy(oldItems, 0, newItems, 0, 10);
oldItems = newItems;

如果你遇到这种情况,我强烈建议你改用Java Collections。特别是ArrayList实质上是包装一个数组,并根据需要照顾增长数组的逻辑:

List<xClass> mysclass = new ArrayList<xClass>();
myclass.add(new xClass());
myclass.add(new xClass());

通常ArrayList,出于多种原因,无论如何,对于数组来说,a是一个更好的解决方案。一方面,数组是可变的。如果你的班级做到了这一点:

class Myclass {
  private int items[];

  public int[] getItems() { return items; }
}

你创建了一个问题,因为呼叫者可以更改你的私人数据成员,这会导致各种防御性复制。将此与列表版本进行比较:

class Myclass {
  private List<Integer> items;

  public List<Integer> getItems() { return Collections.unmodifiableList(items); }
}


 类似资料:
  • 问题内容: 我正在学习Java编程课程,并且需要有关动态数组的帮助。我环顾四周,找不到解决方法,这只是我的简单程度。我上课不远,只是学习了基础知识,所以我不太了解,但是我需要知道如何制作动态数组。 这是我们获得的两个示例程序: 2号 第二个应该继承第一个,并允许您在键入后创建更多数组。但是当我使用它们时,它说我有一个错误,并且说只有在明确要求注释处理的情况下,类名称才被接受。 问题答案: 将此用于

  • 如何动态调整列的大小以支持可能的不规则数组? 上面的代码会分配每个col的长度吗? 事先谢谢你的帮助。

  • 为什么不能以这种方式获得分配的缓冲区长度。 释放同一数组时 运行时必须知道要解除分配多少。在删除数组之前,是否有任何访问长度的方法。如果没有,为什么没有提供获取长度的API?

  • array.h #include<stdio.h> #include<stdlib.h> struct data { int *p;//指针保存数组的起始点 int length;//保存数组的长度 int stat;//0代表无序,1代表有序从小到大,2有序从大到小 int reallength;//实际分配的内存长度 };

  • 问题内容: 我尝试用go编写一个小型应用程序,该应用程序从标准输入中获取“ x”个整数,然后计算平均值并将其返回。到目前为止,我还没有: 尝试编译此错误时,出现以下错误消息: 无效的数组绑定元素 怎么了 问题答案: 您应该使用切片而不是数组: 请参阅“ 深入了解用法和内部原理 ”。 另外,您可能要考虑为循环使用范围:

  • 本文向大家介绍C#动态调整数组大小的方法,包括了C#动态调整数组大小的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#动态调整数组大小的方法。分享给大家供大家参考。具体如下: 通常,我们创建一个数组后就不能调整其长度,但是Array类提供了一个静态方法CreateInstance用来创建一个动态数组,所以我们可以通过它来动态调整数组的长度。 希望本文所述对大家的C#程序设计有所帮助