2010-03-11 35 views

回答

107

是:使用ArrayList

在Java中,「正常」數組是固定大小的。你必須給他們一個大小,不能擴大或縮小他們。要改變大小,你必須創建一個新的數組並複製你想要的數據 - 這對你來說是效率低下和痛苦的。

幸運的是,有各種實現常用的數據結構,以及其他有用的工具也內置類的。您需要檢查the Java 6 API以獲取它們的完整列表。

警告:ArrayList中只能容納對象(例如整數),而不是原語(例如,整數)。在大多數情況下,autoboxing/autounboxing會默默爲您照顧,但您可能會根據自己的行爲得到一些奇怪的行爲。

+2

我不知道爲什麼下面的代碼是正確的java嗎? 'int [] array = new int [size];''size'是一個變量,但是數組的長度必須是固定的,對嗎?@Lord Torgamus – 2012-03-27 06:23:28

+9

@jerry_sjtu是的,數組不會改變大小在程序繼續時匹配'size';它會在執行該行時得到'size'中的任何大小。 – Pops 2012-03-27 14:09:51

+0

每當我從ArrayList中移除一個項目時,最後都會得到一個'null'。任何想法爲什麼? – 2018-02-15 08:21:03

4

您不能更改數組的大小。但是,您可以創建具有正確大小的新陣列,並將舊陣列中的數據複製到新陣列。

但是你最好的選擇是使用jacarta公共的IntList。 (here

它的工作原理與List類似,但佔用的空間更少,效率也更高,因爲它存儲int而不是將包裝對象存儲在int(即Integer類的存儲對象)上。

4

如何使用List呢?例如,ArrayList<integer>

17

陣列都是固定大小一旦實例化。您可以改用List。

自動裝箱做出類似的陣列可以使用的列表,你可以把簡單的INT值到它:

List<Integer> list = new ArrayList<Integer>(); 
list.add(1); 
list.add(2); 
list.add(3); 
+1

爲什麼要聲明List類型的引用變量,而不是ArrayList? – LppEdd 2015-02-08 18:26:14

+1

因爲它允許您在需要時簡單地在List實現之間切換,所以您只需更改新的XYZList()。如果變量聲明爲ArrayList,則可能使用特定於此實現的方法,使更改變得更加複雜。 – Mnementh 2015-02-09 10:10:57

+1

謝謝,我明白了。 – LppEdd 2015-02-12 08:07:21

29

數組在Java中是固定大小的。你需要的是一個ArrayList,它是Java中很多非常有價值的集合之一。

而不是

Integer[] ints = new Integer[x] 

您使用

List<Integer> ints = new ArrayList<Integer>(); 

然後改變你使用ints.add(y)ints.remove(z)以及許多其他方便的方法,你可以在適當的Javadoc中找到列表。

我強烈建議學習Java中可用的集合類,因爲它們是非常強大的,給你很多的內置功能,Java的新手往往試圖重寫不必要的自己。

+0

想工作直到我嘗試過:列表 ints = new ArrayList (); – gorbysbm 2014-02-01 19:01:36

+2

爲什麼使用'List '而不是'ArrayList '? – 2016-11-18 18:04:42

-3

我回答了這個問題,並沒有你不需要一個ArrayList或者任何其他東西,這是一個任務,並完成了我這麼肯定的陣列可以擴大規模。這裏是鏈接 How to use Java Dynamic Array 這裏是我回答 Java Dynamic arrays

+1

這只是錯誤的。鏈接的答案會調用System.arrayCopy(),將舊數組複製到一個新數組中,然後添加新條目。數組仍然不能具有動態大小。 – katzenhut 2015-04-20 11:55:57

8

我與以前的答案提示ArrayList不同意的鏈接,我的問題,因爲ArrayList動態數組,但由數組支持的List。所不同的是,你不能做到以下幾點:

ArrayList list = new ArrayList(4); 
list.put(3,"Test"); 

它會給你一個IndexOutOfBoundsException異常,因爲在這個位置上沒有元素而即便支持數組將允許這樣的添加。因此,您需要使用@ randy-lance建議的自定義可擴展陣列實現

+0

我相信你想鏈接到http://codereply.com/answer/6i5bur/java-dynamic-arrays.html – 2015-08-30 06:01:02

+0

我不確定ArrayList是否有像我在Java8源代碼中看到的put方法。只是試圖找出它的行爲與給定的能力。 但是發現ArrayList.add()方法。 – 2016-10-15 06:44:16

8
  1. 建議使用List來處理小尺寸的尺寸。

  2. 如果你有一個數字的數量龐大,NEVER使用列表和自動裝箱,

    名單<整數>列表

對於每一個單個int,一個新的整數是自動創建的。當列表大小增加時,你會發現它變得越來越慢。這些整數是不必要的對象。 在這種情況下,使用估計的大小會更好,

int[] array = new int[ESTIMATED_SIZE]; 
7
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]); 
}  
} 

} 

來源:How to make dynamic array