一、引言
在Java應用程序中,Array與List是最基本也是最常用的數據類型之一。Array是Java語言中的一種數據結構,是一種有序、可重複、不可變、可以混合類型的數據結構;List是Java集合框架中的一種數據結構,是一個有序、可重複、可變、只能存儲一種數據類型的數據結構。
在我們的Java應用程序中,我們可能經常需要轉換Array為List,或者反過來,這就需要我們使用Java提供的轉換工具類。本文將詳細介紹Java提供的Array轉List工具類,並從多個方面探討其用法、優點和注意事項,以期能夠給Java程序員帶來幫助和啟示。
二、ArrayToList轉換工具的詳細介紹
1、ArrayToList轉換:
在Java中提供了一個Arrays.asList方法,可以把Array轉換為List:
public static <T> List<T> asList(T... a){ return new ArrayList<>(a); }
從上面的代碼可以看出,這個方法只是把Array封裝成ArrayList,因此它的長度是不可變的。
2、ListToArray轉換:
同樣,在Java中提供了一個List.ToArray方法,可以把List轉換為Array:
public <T> T[] toArray(T[] a){ if (a.length < size()){ return (T[])Arrays.copyOf(elementData, size(), a.getClass()); } System.arraycopy(elementData, 0, a, 0, size()); if (a.length > size()){ a[size()] = null; } return a; }
從上面的代碼可以看出,這個方法實際上是調用了Arrays.copyOf的靜態方法進行了數組的拷貝,從而把List轉變為了Array。
3、ArrayToList轉換與ArrayList的區別:
在轉換中使用Arrays.asList方法封裝的List是由數組實現的,而ArrayList則是由鏈表實現的,因此轉換後的結果也有一些明顯的區別:
- Arrays.asList方法封裝的List的長度是不可變的;而ArrayList的長度是可變的。
- Arrays.asList方法封裝的List是由數組實現的;而ArrayList是由鏈表實現的。
- Arrays.asList方法封裝的List支持indexOf()、contains()、containsAll()等操作,但是不支持add()、addAll()、remove()和set()等操作;而ArrayList支持所有這些操作。
- Arrays.asList方法封裝的List不能直接調用clear()方法來清空其元素;而ArrayList則可以。
三、小標題:
1、從Array轉換成List
從Array轉換成List使用很簡單,只需調用Arrays.asList()方法即可:
Integer[] intArr = {1, 2, 3}; List<Integer> intList = Arrays.asList(intArr);
需要注意的是,在轉換後的List中,如果調用List.set()方法,雖然不會拋出UnsupportedOperationException異常,但是實際上Array的元素並沒有被改變,因為轉換後的List底層存儲的仍然是原來的Array。
2、從Array轉換成ArrayList
從Array轉換成ArrayList同樣也是使用Arrays.asList()方法,但是需要將它作為構造函數參數傳入:
Integer[] intArr = {1, 2, 3}; ArrayList<Integer> intList = new ArrayList<>(Arrays.asList(intArr));
需要注意的是,在轉換後的ArrayList中,如果調用List.set()方法,Array的元素也會被改變,因為底層存儲的是ArrayList,而不是原來的Array。
3、List toArray與List轉換成Array
List.toArray()可以轉換List為Array,但需要注意以下幾點:
- 如果傳入的數組的長度大於等於List的長度,則調用List.toArray()將返回一個與該List相同類型的數組,並將List中的所有元素複製到數組中。
- 如果傳入的數組的長度小於List的長度,則調用List.toArray()將返回一個與該List相同類型的數組,與參數中傳入的數組的長度相同,數組中保存了該List對象中前N個元素的引用,其中N由參數數組的長度確定,其餘位置上的元素都為null。
List<String> strList = new ArrayList<>(); strList.add("Hello"); strList.add("world"); String[] strArray = strList.toArray(new String[0]);
需要注意的是,可以通過List的toArray()方法將List轉換成Array,但是此時返回的數組已經切斷與原List的聯繫,對返回的數組的修改不會同步到原List上。
4、注意事項
在使用ArrayToList轉換工具類時,需要注意以下幾點:
- ArrayToList轉換結果中的List是由數組實現的,因此長度是不可變的;而ArrayList是由鏈表實現的,支持動態增刪元素,但是相對而言效率上稍低。
- 在對ArrayToList轉換結果中的List進行操作時,需要注意是否支持該操作,因為Arrays.asList()生成的List只是Arrays內部類,不支持add()等操作,需要自行轉換成ArrayList之後才可以執行這些操作。
- 如果List存儲的是可變對象,使用Arrays.asList()將不可行,因為這會導致修改原數組的元素。
- 必要時可以使用Arrays.copyOf()或者System.arraycopy()等方式生成新的數組。
- 在使用Arrays.asList()時,需要注意傳遞的是數組,而不是列表。
四、總結
在Java應用程序中,Array與List是最基本也是最常用的數據類型之一。在實際開發中我們可能經常需要轉換Array為List,或者反過來。Java提供了一些很方便的轉換工具類來幫助我們完成這些轉換工作。我們只需要遵守一些注意事項並正確使用這些轉換工具類,就可以很方便地完成Array和List之間的轉換,提高我們的代碼效率並優化程序性能。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/246442.html