簡體   English   中英

Java數組大小

[英]Java Array size

我問我Java中的數組初始化是否與C相同。在C中,您無法在程序運行時定義數組的大小。 在Java中是否可能(或者恰如其分)?

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

在我的情況下,我必須使用數組而不是arraylist因為我在Panel上繪制了Polyline

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

感謝幫助

創建后不能更改數組大小,但可以使用System.arraycopy(Object src, int srcPos, Object dest, int destPos, int length)將數組的值復制到另一個更大的數組,不用擔心關於它的速度,因為它是內置函數並使用JNI實現,所以速度非常快

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中的內容實際上與創建數組開始時的語法完全不同......

正如其他人所說,你不能這樣做。 但是你可以使用ArrayList(或任何其他List)並在需要的地方將其轉換為簡單數組,如下所示:

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

在C中,您無法在程序運行時定義數組的大小。 在Java中是否可能(或者恰如其分)?

是的,您可以在運行時定義數組的大小,而不是重新定義它。 這將在堆上創建一個對象,其中有足夠的空間來容納所需數量的基元(在基本數組的情況下)或對象引用(將它們視為指針)。

如果要重新定義數組的大小,則需要創建一個新數組並復制舊數組( System.arraycopy()Arrays.copyOf(...) )。

在我的情況下,我必須使用數組而不是arraylist因為我在Panel上繪制了Polyline

好吧,你仍然可以使用一個列表並調用toArray(...) 這也是在運行時創建數組的示例。

由於您最終要調用Graphics.drawPolyline(...)您必須維護兩個List<Integer>或最好是List<Point> ,並在該列表內部構造x和y數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM