2017-02-25 97 views
2

我正在學習JAVA,並且遇到以下方法在類中使用Array。它們之間有什麼區別,以及哪一個方便在將來使用?JAVA中應該使用哪種數組類型,爲什麼?

ArrayList<Integer> quizGrades = new ArrayList<Integer>(); 
quizGrades.add(95); 
quizGrades.add(87); 
quizGrades.add(83); 

int[] quizGrades = new int[3]; 
quizGrades[0] = 95; 
quizGrades[1] = 87; 
quizGrades[2] = 83; 
+0

首先谷歌命中:http://javahungry.blogspot.com/2015/03/difference-between-array-and-arraylist-in-java-example.html –

+0

@Robert哥倫比亞但一個'ArrayList'也不是一個列表。 –

+2

寫'List quizGrades = new ArrayList ();'而不是。嘗試對接口進行編碼,而不是在可能的情況下針對具體實現編碼。 – mike

回答

2
ArrayList<Integer> quizGrades = new ArrayList<Integer>(); 

的ArrayList是在集合框架的數據結構。如果事先不知道數組的大小,則需要使用數組列表。數組列表動態調整數組大小(插入和刪除操作)。

在另一方面,

int[] quizGrades = new int[1] 

不調整數組,你需要事先提供的大小。同樣,刪除項目變得很麻煩,如果您刪除項目,最好使用Arraylist。

這是主要的區別。你可以閱讀更多有關插入,刪除一次訪問, https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html

+1

請注意,它是更好的做法'列表 list = new ArrayList ()' –

0

ArrayList是Java集合框架類,而int[]是Java中的特殊數組類型。

ArrayList在內部由數組支持並允許調整該陣列的長度,而int[]長度不能被修改,一旦它初始化。

現在我建議你堅持ArrayList,因爲它使用起來更加方便,並且在Collections框架中有很大的支持來操縱你的數據。

數組具有較小內存佔用量的優點,並且在直接訪問數組中的值時效率稍高。畢竟,使用內部數組ArrayList會增加一個小的開銷。但是在99%的情況下,這種性能損失並不是您業務應用程序中的問題,因爲瓶頸在別的地方(網絡,數據庫等)。

總結:作爲一個初學者,如果你想了解與他們合作或者被限制使用它們你或許應該堅持ArrayList,只使用數組。

0

Java中的List類和原語array數據結構都是存儲和訪問對象集合的機制。 ArrayList類是List接口的可調整大小的實現,其中ArrayList內部有一個對象數組。

Java API通常具有需要一個對象數組或List的方法,因此Java中有機制將原始數組轉換爲List,反之亦然。

轉換原始陣列到List

使用Arrays.asList()從陣列到列表轉換。

Integer[] array = new Integer[] { 95, 87, 83 }; 
List<Integer> list = Arrays.asList(array); 
System.out.println(list); // [95, 87, 83] 

轉換列表以基本數組

如果要轉換列表到陣列中使用的toArray()方法。

Integer[] array2 = list.toArray(new Integer[array.size()]); 

同樣,如果要轉換的原始INT值列表可以簡單地遍歷值,並將它們添加。

int[] array3 = new int[] { 95, 87, 83 }; 
    List<Integer> list3 = new ArrayList<Integer>(array3.length); 
    for(int val : array3) { 
     list3.add(val); 
    } 
    System.out.println(list3); // [95, 87, 83] 

異同列表和基本數組

兩種列表和原始陣列之間的差異都具有所述第一元件爲0的索引和第n元素具有n個索引 - 1.訪問一個與索引元素小於0或大於N-1導致異常:IndexOutOfBoundsException異常在列表或ArrayIndexOutOfBoundsException異常在陣列的情況下。

獲取和基本數組元素集合

int grade = array[0]; 
array[0] = 98; 
int len = array.length; // number of elements in array 
grade = array[-1]; // throws ArrayIndexOutOfBoundsException 

獲取和設置列表

int grade = list.get(0); 
list.set(0, 98); 
int len = list.size(); // number of elements in list 
grade = list.get(-1); // throws IndexOutOfBoundsException 

除非列出的是不變的元素(或只讀),那麼你可以添加或刪除元素它。見Collections.unmodifiableList()。要增大/縮小基本數組,您必須創建一個新數組並將舊元素從舊數組複製到新數組。

一般而言,基本數組和解釋在語義上等同,但是具有不同的語法。一種形式可以轉換爲另一種形式。

0

ArrayList包含array字。這不是巧合。
ArrayList實際上是在List接口的大小可變數組實現。
所以發動機罩下,它使用一個數組來表示的數據。

在大多數情況下,使用ArrayList一個數組應該受到青睞,因爲它提供了非常常用的方法來操縱元素的「設置」(add(), addAll(), remove(), set(),等...),你必須有一個數組手動執行。

除此之外,當實際大小達到初始聲明大小時,開發人員不必擔心它操作的元素「集合」的大小,以及與元素「集合」增加/減少容量有關的處理。

Indeeed,具有一個數組,大小是固定的。所以,你必須知道並在你的例子中聲明它的聲明:int[] quizGrades = new int[1];

此外,如果初始大小不足以存儲新元素,則應該在另一個較大的數組中複製數組數據。最後,當ArrayList類增長時,爲你提供什麼。

所以當使用數組?

通常當你需要執行非常好的優化。
對於應用程序開發人員來說,這種需求非常少見。

這裏是一些用例:

  • 你要做足造成的ArrayList包裝的小的開銷

    (CPU,內存)

    要使用原始的,因爲它足夠
  • ,您需要備用每個潛在的消耗字節。
    原始值佔用較少的內存作爲包裝值。
    數組接受原始值。列表和集合類不。

  • 你想要掌握如何存儲和檢索元素的「集合」的數據。它包括有關容量增加和減少的規則。

相關問題