Java数组大小

时间:2016-03-07 15:41:08

标签: java arrays size

我问我Java中的数组初始化是否与C相同。在C中,您无法在程序运行时定义数组的大小。在Java中是否可能(或者恰如其分)?

public int[] createArray(int size) {
    return new int[size];
}

在我的情况下,我必须使用数组而不是arraylist,因为我在面板上绘制折线

g.drawPolyline(xPoints[], yPoints[], n);

感谢您的帮助

4 个答案:

答案 0 :(得分:2)

创建后不能更改数组大小,但可以使用System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)将数组的值复制到另一个更大的数组,不要担心它的速度,因为它是内置函数和用JNI实现,所以它非常快

答案 1 :(得分:1)

C没有像Java那样的“数组”的基本概念;在C中,你是

malloc(some_size * sizeof(one_element))

并将其影响到one_element *(当然,这是一个粗略的描述)。

在Java中,数组同样是动态分配的;如果您在运行时知道大小,那么对于SomeType和大小为someSize的数组,您可以执行以下操作:

final SomeType[] myArray = new SomeType[someSize];

从本质上讲,它是完全相同的;包括这样一个事实:在这两种情况下,数组都不可调整大小,但如果指定了无效的索引会发生巨大的差异:

  • 在Java中,这会导致IndexOutOfBoundsException;
  • 在C中,这是未定义的行为。

总而言之,除了错误地使用“数组”的后果之外,C中的内容以及Java中的内容实际上与创建数组的语法完全不同......

答案 2 :(得分:0)

正如其他人所说,你不能这样做。但是您可以使用ArrayList(或任何其他List)并在需要时将其转换为简单数组,如下所示:

ArrayList<String> arrayList = new ArrayList<>();
String strings[] = (String[])arrayList.toArray();

答案 3 :(得分:0)

  

在C中,您无法在程序运行时定义数组的大小。在Java中是否可能(或者恰如其分)?

是的,您可以在运行时定义数组的大小,而不是重新定义它。这将在堆上创建一个对象,其中有足够的空间来容纳所需数量的基元(如果是基本数组)或对象引用(将它们视为指针)。

如果您想重新定义数组的大小,则需要创建一个新数组并复制旧数组(System.arraycopy()Arrays.copyOf(...))。

  

在我的情况下,我必须使用数组而不是arraylist,因为我在面板上绘制折线

好吧,您仍然可以使用列表并在其上调用toArray(...)。这也是在运行时创建数组的示例。

由于您最终要调用Graphics.drawPolyline(...),您必须维护两个List<Integer>或最好是List<Point>,并在该列表内部构建x和y数组。