java中l(wèi)ist和數(shù)組互相轉(zhuǎn)換的一些方法總結(jié)
在Java中,List 和 數(shù)組(Array) 之間的轉(zhuǎn)換是一個(gè)常見(jiàn)的操作。由于它們是不同的數(shù)據(jù)結(jié)構(gòu),Java提供了一些方法來(lái)在它們之間進(jìn)行轉(zhuǎn)換。我們會(huì)從List到數(shù)組和數(shù)組到List兩種情況分別討論。
1. List 轉(zhuǎn) 數(shù)組
假設(shè)你有一個(gè) `List` 類型的對(duì)象,想要將其轉(zhuǎn)換為一個(gè)數(shù)組。你可以使用 List`類的 toArray()方法。
(a) List 轉(zhuǎn) 數(shù)組(Object類型)
最常見(jiàn)的轉(zhuǎn)換是將一個(gè) `List` 轉(zhuǎn)換為一個(gè)普通的對(duì)象數(shù)組 `Object[]`,方法如下:
import java.util.List; import java.util.ArrayList; public class ListToArrayExample { public static void main(String[] args) { // 創(chuàng)建一個(gè)List List<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); // 將List轉(zhuǎn)換為數(shù)組(Object類型) Object[] array = list.toArray(); // 輸出結(jié)果 for (Object obj : array) { System.out.println(obj); } } }
在這個(gè)例子中,`list.toArray()` 返回的是一個(gè) `Object[]` 類型的數(shù)組。此時(shí)數(shù)組的元素類型是 `Object`,如果需要更具體的類型,可以強(qiáng)制轉(zhuǎn)換。
(b) List 轉(zhuǎn) 數(shù)組(指定類型)
如果你知道 List 中存儲(chǔ)的是某個(gè)具體類型的元素(比如 `String`),你可以使用 `toArray(T[] a)` 方法來(lái)指定數(shù)組的類型,從而避免轉(zhuǎn)換時(shí)的強(qiáng)制類型轉(zhuǎn)換:
import java.util.List; import java.util.ArrayList; public class ListToArrayExample { public static void main(String[] args) { // 創(chuàng)建一個(gè)List List<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); // 將List轉(zhuǎn)換為數(shù)組(指定類型) String[] array = list.toArray(new String[0]); // 輸出結(jié)果 for (String str : array) { System.out.println(str); } } }
在這個(gè)例子中,list.toArray(new String[0]) 生成了一個(gè)類型為 String[]的數(shù)組。new String[0]表示傳入的數(shù)組大小,實(shí)際上該數(shù)組的大小會(huì)根據(jù) List 的元素?cái)?shù)自動(dòng)調(diào)整。
(c) 對(duì)于更復(fù)雜的 List 類型
如果你的 List 中包含自定義類型(比如一個(gè) `Person` 類),轉(zhuǎn)換的方法和上述類似:
import java.util.List; import java.util.ArrayList; class Person { String name; int age; Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return name + ", " + age; } } public class ListToArrayExample { public static void main(String[] args) { List<Person> list = new ArrayList<>(); list.add(new Person("Alice", 30)); list.add(new Person("Bob", 25)); // 將List轉(zhuǎn)換為Person類型的數(shù)組 Person[] array = list.toArray(new Person[0]); // 輸出結(jié)果 for (Person person : array) { System.out.println(person); } } }
2. 數(shù)組 轉(zhuǎn) List
如果你有一個(gè)數(shù)組,想要將其轉(zhuǎn)換為一個(gè) `List`,你可以通過(guò) `Arrays.asList()` 方法來(lái)實(shí)現(xiàn)。
(a) 數(shù)組 轉(zhuǎn) List(基本數(shù)據(jù)類型)
對(duì)于一個(gè)簡(jiǎn)單的數(shù)組(如 `int[]` 或 `String[]`),你可以這樣做:
import java.util.Arrays; import java.util.List; public class ArrayToListExample { public static void main(String[] args) { // 創(chuàng)建一個(gè)數(shù)組 String[] array = {"A", "B", "C"}; // 將數(shù)組轉(zhuǎn)換為L(zhǎng)ist List<String> list = Arrays.asList(array); // 輸出結(jié)果 for (String str : list) { System.out.println(str); } } }
(b) 數(shù)組 轉(zhuǎn) List(原始類型數(shù)組)
注意,`Arrays.asList()` 方法對(duì)于原始類型數(shù)組(如 `int[]`, `double[]` 等)并不會(huì)返回一個(gè) `List<Integer>` 或 `List<Double>` 等類型的 `List`,而是會(huì)返回一個(gè) `List<int[]>` 類型的 List。要避免這個(gè)問(wèn)題,你需要將原始類型數(shù)組包裝成相應(yīng)的包裝類數(shù)組,然后再使用 `Arrays.asList()`。
import java.util.Arrays; import java.util.List; public class ArrayToListExample { public static void main(String[] args) { // 創(chuàng)建一個(gè)int數(shù)組 int[] array = {1, 2, 3}; // 將int數(shù)組包裝為Integer數(shù)組 Integer[] boxedArray = Arrays.stream(array).boxed().toArray(Integer[]::new); // 將Integer數(shù)組轉(zhuǎn)換為L(zhǎng)ist List<Integer> list = Arrays.asList(boxedArray); // 輸出結(jié)果 for (Integer num : list) { System.out.println(num); } } }
(c) 數(shù)組 轉(zhuǎn) List(自定義對(duì)象數(shù)組)
如果你有一個(gè)自定義類型的數(shù)組,使用 `Arrays.asList()` 同樣適用:
import java.util.Arrays; import java.util.List; class Person { String name; int age; Person(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return name + ", " + age; } } public class ArrayToListExample { public static void main(String[] args) { // 創(chuàng)建一個(gè)Person類型的數(shù)組 Person[] array = {new Person("Alice", 30), new Person("Bob", 25)}; // 將數(shù)組轉(zhuǎn)換為L(zhǎng)ist List<Person> list = Arrays.asList(array); // 輸出結(jié)果 for (Person person : list) { System.out.println(person); } } }
3. 注意事項(xiàng)
(a) `Arrays.asList()` 的限制
- 使用 `Arrays.asList()` 創(chuàng)建的 List 是一個(gè) **固定大小 的 List,這意味著你不能向 List 中添加或刪除元素。如果試圖進(jìn)行這樣的操作,會(huì)拋出 `UnsupportedOperationException`。
例如:
List<String> list = Arrays.asList("A", "B", "C"); list.add("D"); // 運(yùn)行時(shí)拋出 UnsupportedOperationException
如果你需要一個(gè)可修改的 List,應(yīng)該將其包裝在一個(gè)新的 `ArrayList` 中:
List<String> list = new ArrayList<>(Arrays.asList("A", "B", "C")); list.add("D"); // 現(xiàn)在可以修改
(b) 通過(guò) `toArray()` 方法進(jìn)行類型轉(zhuǎn)換
如果 List 的類型不是你想要的類型(例如 List 存儲(chǔ)了類型為 `Object` 的元素),可以在進(jìn)行轉(zhuǎn)換時(shí)強(qiáng)制類型轉(zhuǎn)換。例如:
Object[] objArray = list.toArray(); String[] strArray = (String[]) objArray; // 強(qiáng)制轉(zhuǎn)換為 String[]
(c) 對(duì)于原始類型數(shù)組
Java 沒(méi)有直接將原始類型數(shù)組(如 `int[]`, `double[]`)轉(zhuǎn)換為 List 的方法。你可以先將原始類型數(shù)組轉(zhuǎn)換為包裝類數(shù)組,然后再用 `Arrays.asList()` 方法轉(zhuǎn)換成 List。例如:
int[] array = {1, 2, 3}; Integer[] boxedArray = Arrays.stream(array).boxed().toArray(Integer[]::new); List<Integer> list = Arrays.asList(boxedArray);
總結(jié)
- List 轉(zhuǎn) 數(shù)組:使用 `toArray()` 方法。對(duì)于類型化的 List,推薦使用 `toArray(T[] a)` 方法,這樣可以避免不必要的類型轉(zhuǎn)換。
- 數(shù)組 轉(zhuǎn) List:使用 `Arrays.asList()` 方法,但要注意原始類型數(shù)組的特殊情況(它們會(huì)被轉(zhuǎn)換為一個(gè)包含數(shù)組的 List),并且返回的 List 是固定大小的,不能進(jìn)行添加或刪除元素的操作。
到此這篇關(guān)于java中l(wèi)ist和數(shù)組互相轉(zhuǎn)換的一些方法的文章就介紹到這了,更多相關(guān)java list和數(shù)組互相轉(zhuǎn)換內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
200行Java代碼如何實(shí)現(xiàn)依賴注入框架詳解
依賴注入對(duì)大家來(lái)說(shuō)應(yīng)該都不陌生,下面這篇文章主要給大家介紹了關(guān)于利用200行Java代碼如何實(shí)現(xiàn)依賴注入框架的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-05-0510個(gè)避免Java內(nèi)存泄露的最佳實(shí)踐分享
即使有垃圾回收器的幫助,Java應(yīng)用程序仍然可能遭遇內(nèi)存泄漏問(wèn)題,本文將介紹10個(gè)避免Java內(nèi)存泄漏的最佳實(shí)踐,大家可以根據(jù)需求自己進(jìn)行選擇2025-04-04Android?Studio中創(chuàng)建java工程的完整步驟
Android?Studio創(chuàng)建java工程是非常麻煩的,因?yàn)锳ndroid?Studio沒(méi)有提供直接創(chuàng)建java工程的方法,下面這篇文章主要給大家介紹了關(guān)于Android?Studio中創(chuàng)建java工程的完整步驟,需要的朋友可以參考下2024-01-01JAVA三種攔截方式詳解(原生過(guò)濾器Filter、springMVC攔截器、aop切面)
在Java開(kāi)發(fā)中方法攔截是一種常見(jiàn)的技術(shù),可以用于在方法執(zhí)行前后添加額外的邏輯或修改方法的行為,這篇文章主要給大家介紹了關(guān)于JAVA三種攔截方式的相關(guān)資料,文中介紹的方式分別是原生過(guò)濾器Filter、springMVC攔截器、aop切面,需要的朋友可以參考下2024-05-05詳解SpringBoot Mybatis如何對(duì)接多數(shù)據(jù)源
這篇文章主要為大家介紹了SpringBoot Mybatis如何對(duì)接多數(shù)據(jù)源實(shí)現(xiàn)方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09如何在spring boot中進(jìn)行參數(shù)校驗(yàn)示例詳解
這篇文章主要介紹了如何在spring-boot中進(jìn)行參數(shù)校驗(yàn)及l(fā)ombok的使用詳解,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05java實(shí)體類轉(zhuǎn)json時(shí)null值不要轉(zhuǎn)為"null"問(wèn)題
這篇文章主要介紹了java實(shí)體類轉(zhuǎn)json時(shí)null值不要轉(zhuǎn)為“null”問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11spring中使用mybatis實(shí)現(xiàn)批量插入的示例代碼
這篇文章主要介紹了spring中使用mybatis實(shí)現(xiàn)批量插入的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06