2015-10-12 45 views
-4

我有一些關於ArrayArrayList的問題。我在這裏搜索,找不到我正在尋找的答案。Array和ArrayList

  1. 我明白ArraysArrayListjava.util一部分。所以當我創建和ArrayArrayList我創建對象和實例?

  2. 爲什麼必須導入java.util.ArraList才能創建一個ArrayList對象,但是不需要導入java.util.Arrays來創建和Array對象?

  3. 爲什麼Array的方法調用方式與ArrayList不同?是否因爲Arrays類的方法都是靜態的?

  4. 爲什麼說使用和陣列的性能比使用ArrayList的性能要快?

  5. 我知道要迭代數組中的值,可以使用for循環。如何迭代ArrayList中的值 - 我知道也可以使用for循環,但在互聯網中,據說我可以使用迭代器,這個迭代器是什麼?

  6. 如果數組存儲對象,數組可以是多維的嗎?

  7. 如果我正在處理原始數據,那麼我明白它們應該全部存儲在一個數組中,因爲ArrayList不能包含原始數據類型。但是,如果我只用對象工作,我應該選擇使用Array還是ArrayList

+0

很確定這裏有很多答案。 –

+0

作爲第一個提示:'java.util.Arrays'只是一個處理_real_數組的util類。這個類不是一個數組。 – Tom

+2

你正在'陣列'與'陣列'混淆。 –

回答

1

是的,當你創建一個數組或ArrayList你正在創建一個實例/對象。

包類似於包含類定義的目錄(例如java.util包包含ArrayList類)。包中的所有類都有唯一的名稱。但類名可以在其他包中使用。所以,實際上有超過1個ArrayList類可能。 所以,這就是爲什麼的java編譯器總是需要知道類的全名。

因此,當您創建ArrayList時,您希望編譯器知道您正在創建java.util.ArrayList。其實你可以指定你的對象創建期間:

java.util.ArrayList list = new java.util.ArrayList(); 

但是,這真的詳細。很煩人,你不得不一直重複這個全名。這就是import陳述的目的。 通過指定import java.util.ArrayList,您告訴編譯器,所有對ArrayList的引用實際上都是java.util.ArrayList類型。

數組是非常特殊的類。它們不是原語,但是在Java虛擬機和編譯器的底層有很多事情發生。老實說,我不想對此解釋太多,因爲這會讓你感到困惑。

但總之,java爲每種類型的數組使用專用類。所以,有一個int[]類,一類long[],一個Object[]類等

老實說陣列的性能並不比一個ArrayList的更好。兩者都有其優點。

Iterator是之前發明的,每次迭代都是在java中引入的。您只能對實現Iterable接口的集合使用迭代器。 (同樣,不是數組的情況)。迭代器的一個優點是,您可以在迭代時從列表中刪除對象(即使用iterator.remove()方法)

當然,即使存儲對象,數組也可以是多維的。而且ArrayList不能包含原始類型

我通常寧願使用ArrayListArrayList的主要優點之一是,它在超出容量時會自動調整大小。數組並非如此。

另一方面,如果您知道列表的確切長度,那麼數組將使用更少的內存。

剛剛完成:還有一個Arrays類,它包含數組實例中缺少的便捷方法。事實上,這些方法是嚴格的靜態方法。

+0

也非常好的答案!謝謝! – Consuela

0

在最簡單的方式,揮手過去的細節:

陣列(注意小的名稱)的大小是固定聚合類型;它不是可以歸類的東西。 ArrayList是Collections框架的一部分。查看Javadocs瞭解該系列產品的詳細信息。

java.util.Arrays是一個便利的類,提供了靜態有用的操作數組的方法。由於它們是靜態的,因此不需要或允許直接實例化。

您的其他問題需要調整,一旦你通過這些基本面。

+0

啊我現在看到了。你可以理解我真正的疑惑,並指向正確的方向。我可以看到你很有知識! :-)。再見。 – Consuela

0
  1. ArrayList是Java集合庫中可用的集合之一。您創建一個ArrayList對象,它允許您管理一系列項目。另一方面,Arrays是對數組進行操作的實用函數的集合。您可以通過執行類似new int[10]的操作來創建新陣列。

  2. 您構建了一個ArrayListnew ArrayList(),因此您必須導入它。 Arrays類與創建數組無關,因此不是必需的。

  3. ArraysArrayList是完全不同的。一個只是一個函數集合(它們不是數組的方法),您不能創建Arrays的實例。 ArrayList的方法直接在ArrayList上操作。

  4. 數組提供對數組存儲的直接訪問並保存任何類型的值(基元和對象引用),而ArrayList範只保存對象引用。對於對象引用,沒有真正的速度差異,但對於基元,必須將這些值放入或取出對象「框」,該對象顯着較慢。

  5. 迭代器是它實現了一個集的穿越,讓你的下一個項目(next),並允許你要問,如果有以最有效的方式的話(hasNext)可能收集的類型的對象。迭代器也用於循環,但更安全,因爲您不必自己管理索引。

  6. 是的。一個ArrayList也是一個對象,所以多維ArrayList只是一個ArrayList它擁有ArrayList s。如果使用對象數組,請始終使用ArrayList。處理起來要容易得多(例如,如果您添加到ArrayList,它將無縫地重新分配陣列),並且更安全。使用泛型時,可以保證添加正確類型的對象。使用數組,您可以將String[]轉換爲Object[],但ArrayList<String>不能轉換爲ArrayList , making it impossible to put a Double into a String`數組。

+0

非常完整的答案!謝謝! – Consuela