Array與Arrays的區別(數組轉list)
Java中最基本的一個存儲結構。
提供了動態創建和訪問 Java 數組的方法。其中的元素的類型必須相同。
效率高,但容量固定且無法動態改變。
它無法判斷其中實際存有多少元素,length只是告訴我們array的容量。
2、靜態類Arrays
此靜態類專門用來操作array ,提供搜索、排序、復制等靜態方法。
equals():比較兩個array是否相等。array擁有相同元素個數,且所有對應元素兩兩相等。
sort():用來對array進行排序。
binarySearch():在排好序的array中尋找元素。
Arrays.asList(array):將數組array轉化為List (此種方法不正規)
注意:
為了實現把一個數組轉換成一個ArrayList,很多Java程序員會使用如下的代碼:
Arrays.asList確實會返回一個ArrayList對象,但是該類是Arrays類 中一個私有靜態內部類,而不是常見的java.util.ArrayList類。這個java.util.Arrays.ArrayList類具有 set(),get(),contains()等方法,但是不具有任何添加或移除元素的任何方法。因為該類的大小(size)是固定的。為了創建出一個真正的ArrayList,代碼應該如下所示:
我們知道,ArrayList的構造方法可以接受一個Collection類型的對象,而我們的 java.util.Arrays.ArrayList正好也是它的一個子類。實際上,更加高效的代碼示例是:
(正確的做法是test2和test3的做法)
package Array2List; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import org.junit.Test; public class Array2List { /** * 錯誤的做法 此種方法返回的list不具有任何添加或移除元素的任何方法。因為該類的大小(size)是固定的。 */ @Test public void test1() { String attr[] = { "1", "2", "3" }; List<String> list = Arrays.asList(attr); list.add("4");// 報錯 for (String s : list) { System.out.println(s); } } /** * 正確的做法 * ArrayList的構造方法可以接受一個Collection類型的對象,而我們的 java.util.Arrays.ArrayList正好也是它的一個子類 */ @Test public void test2() { String attr[] = { "1", "2", "3" }; List<String> list = new ArrayList<String>(Arrays.asList(attr)); list.add("4");// 不會報錯 for (String s : list) { System.out.println(s);// 1234 } } /** * 更加高效的做法 * ArrayList的構造方法可以接受一個Collection類型的對象,而我們的 java.util.Arrays.ArrayList正好也是它的一個子類 */ @Test public void test3() { String attr[] = { "1", "2", "3" }; List<String> list = new ArrayList<String>(attr.length); Collections.addAll(list, attr); list.add("4");// 不會報錯 for (String s : list) { System.out.println(s);// 1234 } } }