Java中int[]與ArrayList<>數(shù)組轉(zhuǎn)換方法詳解
前言
在 Java 中,int[]
與 ArrayList<Integer>
是兩種常用的數(shù)據(jù)結(jié)構(gòu)。由于 int[]
是基本數(shù)據(jù)類型數(shù)組,而 ArrayList<Integer>
是對象集合類型,兩者的轉(zhuǎn)換需要注意類型轉(zhuǎn)換的細(xì)節(jié)。以下是完整的講解和實(shí)現(xiàn)方法。
1. int[] 轉(zhuǎn)換為 ArrayList
方法 1:使用手動(dòng)遍歷
通過遍歷數(shù)組,將每個(gè)元素逐一添加到 ArrayList<Integer>
中。
代碼實(shí)現(xiàn)
import java.util.ArrayList; public class Main { public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5}; // 轉(zhuǎn)換為 ArrayList ArrayList<Integer> list = new ArrayList<>(); for (int num : array) { list.add(num); } System.out.println(list); // 輸出: [1, 2, 3, 4, 5] } }
說明
- 手動(dòng)遍歷適合任何版本的 Java。
- 時(shí)間復(fù)雜度:O ( n ) O(n)O(n),
n
是數(shù)組的長度。
方法 2:使用 Java 8 Stream
通過 Arrays.stream()
和 boxed()
方法,將 int[]
轉(zhuǎn)換為 Stream<Integer>
,再收集到 ArrayList<Integer>
。
代碼實(shí)現(xiàn)
import java.util.ArrayList; import java.util.Arrays; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { int[] array = {1, 2, 3, 4, 5}; // 使用 Stream 轉(zhuǎn)換為 ArrayList ArrayList<Integer> list = Arrays.stream(array) .boxed() // 轉(zhuǎn)為 Integer 類型 .collect(Collectors.toCollection(ArrayList::new)); System.out.println(list); // 輸出: [1, 2, 3, 4, 5] } }
說明
- 適用于 Java 8 及以上版本。
- 使用
boxed()
將基本類型int
轉(zhuǎn)換為包裝類型Integer
。
2. ArrayList 轉(zhuǎn)換為 int[]
方法 1:使用手動(dòng)遍歷
通過遍歷 ArrayList<Integer>
,逐一將元素添加到 int[]
中。
代碼實(shí)現(xiàn)
import java.util.ArrayList; public class Main { public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); // 轉(zhuǎn)換為 int[] int[] array = new int[list.size()]; for (int i = 0; i < list.size(); i++) { array[i] = list.get(i); // 拆箱 Integer -> int } System.out.println(Arrays.toString(array)); // 輸出: [1, 2, 3] } }
說明
- 手動(dòng)遍歷適合任何版本的 Java。
- 通過
list.get(i)
獲取元素并自動(dòng)拆箱為int
。
方法 2:使用 Java 8 Stream
通過 Stream.mapToInt()
將 ArrayList<Integer>
轉(zhuǎn)換為 int[]
。
代碼實(shí)現(xiàn)
import java.util.ArrayList; public class Main { public static void main(String[] args) { ArrayList<Integer> list = new ArrayList<>(); list.add(1); list.add(2); list.add(3); // 使用 Stream 轉(zhuǎn)換為 int[] int[] array = list.stream() .mapToInt(Integer::intValue) // 轉(zhuǎn)為 int 類型 .toArray(); System.out.println(Arrays.toString(array)); // 輸出: [1, 2, 3] } }
說明
- 適用于 Java 8 及以上版本。
- 使用
mapToInt()
方法完成從Integer
到int
的轉(zhuǎn)換。
3. 綜合示例
以下代碼實(shí)現(xiàn)了 int[]
和 ArrayList<Integer>
的雙向轉(zhuǎn)換。
import java.util.ArrayList; import java.util.Arrays; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { // int[] 轉(zhuǎn) ArrayList<Integer> int[] array = {1, 2, 3, 4, 5}; ArrayList<Integer> list = Arrays.stream(array) .boxed() // 轉(zhuǎn)換為 Integer .collect(Collectors.toCollection(ArrayList::new)); System.out.println("int[] -> ArrayList<Integer>: " + list); // ArrayList<Integer> 轉(zhuǎn) int[] int[] newArray = list.stream() .mapToInt(Integer::intValue) // 轉(zhuǎn)換為 int .toArray(); System.out.println("ArrayList<Integer> -> int[]: " + Arrays.toString(newArray)); } }
運(yùn)行結(jié)果
int[] -> ArrayList<Integer>: [1, 2, 3, 4, 5] ArrayList<Integer> -> int[]: [1, 2, 3, 4, 5]
4. 注意事項(xiàng)自動(dòng)裝箱與拆箱:
- 從
int
轉(zhuǎn)換為Integer
是自動(dòng)裝箱。 - 從
Integer
轉(zhuǎn)換為int
是自動(dòng)拆箱。 - 手動(dòng)遍歷時(shí),這些操作由 JVM 自動(dòng)完成。
- 從
null 的處理:
- 如果
ArrayList<Integer>
包含null
,在轉(zhuǎn)換為int[]
時(shí)會拋出NullPointerException
。 - 示例:
ArrayList<Integer> list = new ArrayList<>(Arrays.asList(1, null, 3)); int[] array = list.stream().mapToInt(Integer::intValue).toArray(); // 拋出 NullPointerException
- 如果
性能:
- 手動(dòng)遍歷方法比
Stream
方法稍快,適用于性能敏感場景。 Stream
方法代碼更簡潔,推薦在現(xiàn)代 Java 項(xiàng)目中使用。
- 手動(dòng)遍歷方法比
5. 方法對比
轉(zhuǎn)換方向 | 方法 | 優(yōu)點(diǎn) | 缺點(diǎn) |
---|---|---|---|
int[] -> ArrayList | 手動(dòng)遍歷 | 簡單、高效 | 代碼稍顯冗長 |
Stream.boxed() | 代碼簡潔,現(xiàn)代風(fēng)格 | Java 8 及以上支持 | |
ArrayList -> int[] | 手動(dòng)遍歷 | 簡單、高效 | 代碼稍顯冗長 |
Stream.mapToInt() | 代碼簡潔,現(xiàn)代風(fēng)格 | Java 8 及以上支持 |
6. 總結(jié)
- 推薦方案:
- 如果使用 Java 8 或更高版本,優(yōu)先使用
Stream
,代碼更簡潔。 - 對性能要求高的場景,可以選擇手動(dòng)遍歷。
- 如果使用 Java 8 或更高版本,優(yōu)先使用
- 核心操作:
boxed()
:將基本類型轉(zhuǎn)換為包裝類型。mapToInt()
:將包裝類型轉(zhuǎn)換為基本類型。
總結(jié)
到此這篇關(guān)于Java中int[]與ArrayList<>數(shù)組轉(zhuǎn)換方法的文章就介紹到這了,更多相關(guān)int[]與ArrayList<>數(shù)組轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java中的Map接口實(shí)現(xiàn)類HashMap和LinkedHashMap詳解
這篇文章主要介紹了Java中的Map接口實(shí)現(xiàn)類HashMap和LinkedHashMap詳解,我們常會看到這樣的一種集合,IP地址與主機(jī)名,等,這種一一對應(yīng)的關(guān)系,就叫做映射,Java提供了專門的集合類用來存放這種對象關(guān)系的對象,需要的朋友可以參考下2024-01-01Spring Boot使用RestTemplate消費(fèi)REST服務(wù)的幾個(gè)問題記錄
這篇文章主要介紹了Spring Boot使用RestTemplate消費(fèi)REST服務(wù)的幾個(gè)問題記錄,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-06-06使用Java visualVM監(jiān)控遠(yuǎn)程JVM的流程分析
我們經(jīng)常需要對我們的開發(fā)的軟件做各種測試, 軟件對系統(tǒng)資源的使用情況更是不可少,JDK1.6開始自帶的VisualVM就是不錯(cuò)的監(jiān)控工具,本文給大家分享使用Java visualVM監(jiān)控遠(yuǎn)程JVM的問題,感興趣的朋友跟隨小編一起看看吧2021-05-05Scala實(shí)現(xiàn)冒泡排序、歸并排序和快速排序的示例代碼
這篇文章主要介紹了Scala實(shí)現(xiàn)冒泡排序、歸并排序和快速排序的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-06-06淺談一下maven優(yōu)缺點(diǎn)及使用和特點(diǎn)
這篇文章主要介紹了淺談一下maven優(yōu)缺點(diǎn)及使用和特點(diǎn),一個(gè)項(xiàng)目管理工具軟件,那么maven項(xiàng)目有什么優(yōu)缺點(diǎn)呢,讓我們一起來看看吧2023-03-03Java?lambda表達(dá)式與泛型整理總結(jié)
Lambda?表達(dá)式(lambda?expression)是一個(gè)匿名函數(shù),Lambda表達(dá)式基于數(shù)學(xué)中的λ演算得名。泛型編程,故如其名,是一個(gè)泛化的編程方式。其實(shí)現(xiàn)原理為程序員編寫一個(gè)函數(shù)/類的代碼示例,讓編譯器去填補(bǔ)出不同的函數(shù)實(shí)現(xiàn)2022-07-07