我问我Java中的数组初始化是否与C相同。在C中,您无法在程序运行时定义数组的大小。在Java中是否可能(或者恰如其分)?
public int[] createArray(int size) {
return new int[size];
}
在我的情况下,我必须使用数组而不是arraylist,因为我在面板上绘制折线
g.drawPolyline(xPoints[], yPoints[], n);
感谢您的帮助
答案 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];
从本质上讲,它是完全相同的;包括这样一个事实:在这两种情况下,数组都不可调整大小,但如果指定了无效的索引会发生巨大的差异:
IndexOutOfBoundsException
; 总而言之,除了错误地使用“数组”的后果之外,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数组。