我想知道如何初始化一個整數數組,使得它的大小和值通過執行我的程序來改變,有什麼建議嗎?Java中的可變長度(動態)數組
回答
是:使用ArrayList。
在Java中,「正常」數組是固定大小的。你必須給他們一個大小,不能擴大或縮小他們。要改變大小,你必須創建一個新的數組並複製你想要的數據 - 這對你來說是效率低下和痛苦的。
幸運的是,有各種實現常用的數據結構,以及其他有用的工具也內置類的。您需要檢查the Java 6 API以獲取它們的完整列表。
警告:ArrayList中只能容納對象(例如整數),而不是原語(例如,整數)。在大多數情況下,autoboxing/autounboxing會默默爲您照顧,但您可能會根據自己的行爲得到一些奇怪的行爲。
您不能更改數組的大小。但是,您可以創建具有正確大小的新陣列,並將舊陣列中的數據複製到新陣列。
但是你最好的選擇是使用jacarta公共的IntList。 (here)
它的工作原理與List類似,但佔用的空間更少,效率也更高,因爲它存儲int而不是將包裝對象存儲在int(即Integer類的存儲對象)上。
如何使用List
呢?例如,ArrayList<integer>
陣列都是固定大小一旦實例化。您可以改用List。
自動裝箱做出類似的陣列可以使用的列表,你可以把簡單的INT值到它:
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(3);
數組在Java中是固定大小的。你需要的是一個ArrayList,它是Java中很多非常有價值的集合之一。
而不是
Integer[] ints = new Integer[x]
您使用
List<Integer> ints = new ArrayList<Integer>();
然後改變你使用ints.add(y)
和ints.remove(z)
以及許多其他方便的方法,你可以在適當的Javadoc中找到列表。
我強烈建議學習Java中可用的集合類,因爲它們是非常強大的,給你很多的內置功能,Java的新手往往試圖重寫不必要的自己。
想工作直到我嘗試過:列表
爲什麼使用'List
我回答了這個問題,並沒有你不需要一個ArrayList或者任何其他東西,這是一個任務,並完成了我這麼肯定的陣列可以擴大規模。這裏是鏈接 How to use Java Dynamic Array 這裏是我回答 Java Dynamic arrays
這只是錯誤的。鏈接的答案會調用System.arrayCopy(),將舊數組複製到一個新數組中,然後添加新條目。數組仍然不能具有動態大小。 – katzenhut 2015-04-20 11:55:57
我與以前的答案提示ArrayList
不同意的鏈接,我的問題,因爲ArrayList
是不動態數組,但由數組支持的List。所不同的是,你不能做到以下幾點:
ArrayList list = new ArrayList(4);
list.put(3,"Test");
它會給你一個IndexOutOfBoundsException異常,因爲在這個位置上沒有元素而即便支持數組將允許這樣的添加。因此,您需要使用@ randy-lance建議的自定義可擴展陣列實現
我相信你想鏈接到http://codereply.com/answer/6i5bur/java-dynamic-arrays.html – 2015-08-30 06:01:02
我不確定ArrayList是否有像我在Java8源代碼中看到的put方法。只是試圖找出它的行爲與給定的能力。 但是發現ArrayList.add()方法。 – 2016-10-15 06:44:16
建議使用List來處理小尺寸的尺寸。
如果你有一個數字的數量龐大,NEVER使用列表和自動裝箱,
名單<整數>列表
對於每一個單個int,一個新的整數是自動創建的。當列表大小增加時,你會發現它變得越來越慢。這些整數是不必要的對象。 在這種情況下,使用估計的大小會更好,
int[] array = new int[ESTIMATED_SIZE];
Simple code for dynamic array. In below code then array will become full of size we copy all element to new double size array(variable size array).sample code is below
public class DynamicArray {
static int []increaseSizeOfArray(int []arr){
int []brr=new int[(arr.length*2)];
for (int i = 0; i < arr.length; i++) {
brr[i]=arr[i];
}
return brr;
}
public static void main(String[] args) {
int []arr=new int[5];
for (int i = 0; i < 11; i++) {
if (i<arr.length) {
arr[i]=i+100;
}
else {
arr=increaseSizeOfArray(arr);
arr[i]=i+100;
}
}
for (int i = 0; i < arr.length; i++) {
System.out.println("arr="+arr[i]);
}
}
}
- 1. 數組中的可變長度數據
- 2. C++:可變長度數組
- 3. 可變長度c數組
- 4. 可變長度數組
- 5. MySQL中的可變長度數組
- 6. C++ 14中的可變長度數組?
- 7. Java的多個可變長度參數
- 8. Javascript可變長度數組可能
- 9. 添加可變長度的數組
- 10. 動態長度的字符數組
- 11. 長度在C++動態數組的
- 12. 如何使用可變長度參數爲java函數動態傳遞參數
- 13. 如何從一個可變長度的數組中獲取一個可變長度數組的指定子集?
- 14. 取決於文件長度的可變長度數組C++
- 15. 是否有靜態類型和可變長度的Java數組/列表
- 16. f中的可變長度元組#
- 17. 通過可變長度的Java數組進行迭代
- 18. 聲明可變長度數組
- 19. OpenCL:輸出可變長度數組
- 20. C++數組長度可變行不通
- 21. 快速訪問可變長度數組
- 22. C#可變長度字符串數組
- 23. 動態長度字符串數組
- 24. 將可變長度數組轉換爲scala中的元組
- 25. 在java中錯誤的數組長度
- 26. java中的任意數組長度
- 27. 在java中獲取數組的長度
- 28. 可變長度的靜態陣列
- 29. Java;二維數組長度
- 30. 可變長度參數
我不知道爲什麼下面的代碼是正確的java嗎? 'int [] array = new int [size];''size'是一個變量,但是數組的長度必須是固定的,對嗎?@Lord Torgamus – 2012-03-27 06:23:28
@jerry_sjtu是的,數組不會改變大小在程序繼續時匹配'size';它會在執行該行時得到'size'中的任何大小。 – Pops 2012-03-27 14:09:51
每當我從ArrayList中移除一個項目時,最後都會得到一個'null'。任何想法爲什麼? – 2018-02-15 08:21:03