Java中ArrayList單行初始化的多種方法
Java中ArrayList的單行初始化方法
技術(shù)背景
在Java開發(fā)中,我們經(jīng)常需要初始化列表,尤其是ArrayList,用于存儲(chǔ)和管理數(shù)據(jù)。為了提高代碼的簡潔性和可讀性,我們希望能在一行代碼內(nèi)完成ArrayList的初始化。本文將介紹多種在Java中單行初始化ArrayList的方法。
實(shí)現(xiàn)步驟
1. 使用Arrays.asList方法
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Main {
public static void main(String[] args) {
// 創(chuàng)建一個(gè)不可變大小的List
List<String> places = Arrays.asList("Buenos Aires", "Córdoba", "La Plata");
// 若需要可變的ArrayList,可進(jìn)一步轉(zhuǎn)換
ArrayList<String> mutablePlaces = new ArrayList<>(places);
}
}
Arrays.asList方法會(huì)返回一個(gè)固定大小的列表,若要得到可變的ArrayList,可將其作為參數(shù)傳遞給ArrayList的構(gòu)造函數(shù)。
2. 使用雙括號(hào)初始化
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<String> places = new ArrayList<String>() {{
add("A");
add("B");
add("C");
}};
}
}
雙括號(hào)初始化實(shí)際上創(chuàng)建了一個(gè)ArrayList的匿名子類,并在實(shí)例初始化塊中添加元素。不過這種方法會(huì)創(chuàng)建額外的類,可能會(huì)帶來一些性能開銷。
3. 使用List.of方法(Java 9及以上)
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
// 創(chuàng)建一個(gè)不可變的List
List<String> places = List.of("Buenos Aires", "Córdoba", "La Plata");
// 若需要可變的ArrayList,可進(jìn)一步轉(zhuǎn)換
ArrayList<String> mutablePlaces = new ArrayList<>(places);
}
}
List.of方法會(huì)返回一個(gè)不可變的列表,若要得到可變的ArrayList,同樣可將其作為參數(shù)傳遞給ArrayList的構(gòu)造函數(shù)。
4. 使用Stream API(Java 8及以上)
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
// 創(chuàng)建一個(gè)List
List<String> places = Stream.of("Buenos Aires", "Córdoba", "La Plata")
.collect(Collectors.toList());
// 若需要確保是ArrayList
ArrayList<String> arrayListPlaces = Stream.of("Buenos Aires", "Córdoba", "La Plata")
.collect(Collectors.toCollection(ArrayList::new));
}
}
Stream API提供了一種靈活的方式來處理元素,通過Stream.of創(chuàng)建流,再使用collect方法將流轉(zhuǎn)換為列表。
5. 使用Guava庫
import com.google.common.collect.Lists;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
ArrayList<String> places = Lists.newArrayList("Buenos Aires", "Córdoba", "La Plata");
}
}
Guava庫提供了Lists.newArrayList方法,可方便地創(chuàng)建并初始化ArrayList。
核心代碼
以下是一個(gè)綜合示例,展示了上述多種方法的使用:
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import com.google.common.collect.Lists;
public class ArrayListInitialization {
public static void main(String[] args) {
// 使用Arrays.asList
List<String> list1 = Arrays.asList("A", "B", "C");
ArrayList<String> arrayList1 = new ArrayList<>(list1);
// 使用雙括號(hào)初始化
List<String> list2 = new ArrayList<String>() {{
add("A");
add("B");
add("C");
}};
// 使用List.of(Java 9及以上)
List<String> list3 = List.of("A", "B", "C");
ArrayList<String> arrayList3 = new ArrayList<>(list3);
// 使用Stream API
List<String> list4 = Stream.of("A", "B", "C").collect(Collectors.toList());
ArrayList<String> arrayList4 = Stream.of("A", "B", "C")
.collect(Collectors.toCollection(ArrayList::new));
// 使用Guava庫
ArrayList<String> arrayList5 = Lists.newArrayList("A", "B", "C");
}
}
最佳實(shí)踐
- 選擇合適的方法:根據(jù)項(xiàng)目的Java版本和具體需求選擇合適的初始化方法。如果是Java 9及以上版本,推薦使用
List.of方法;如果需要靈活處理元素,可使用StreamAPI。 - 考慮可變性:如果列表需要在后續(xù)進(jìn)行修改,確保初始化的列表是可變的。如使用
Arrays.asList和List.of返回的列表是不可變的,需要進(jìn)一步轉(zhuǎn)換為ArrayList。 - 避免過度依賴外部庫:雖然Guava庫提供了方便的方法,但如果項(xiàng)目中沒有引入該庫,不建議為了初始化
ArrayList而引入它。
常見問題
1. Arrays.asList和List.of的區(qū)別
Arrays.asList返回的列表是固定大小的,可通過set方法修改元素,但不能添加或刪除元素;List.of返回的列表是不可變的,任何修改操作都會(huì)拋出異常。Arrays.asList允許傳入null元素,而List.of不允許。
2. 雙括號(hào)初始化的缺點(diǎn)
雙括號(hào)初始化會(huì)創(chuàng)建一個(gè)匿名子類,增加了類的數(shù)量和內(nèi)存開銷,同時(shí)可能導(dǎo)致內(nèi)存泄漏。因此,不建議在性能敏感的場景中使用。
3. Stream API的性能問題
使用Stream API初始化列表可能會(huì)帶來一定的性能開銷,尤其是在處理大量元素時(shí)。因此,在性能要求較高的場景中,應(yīng)謹(jǐn)慎使用。
到此這篇關(guān)于Java中實(shí)現(xiàn)ArrayList單行初始化的方法的文章就介紹到這了,更多相關(guān)Java ArrayList單行初始化內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot后端接收前端傳數(shù)組參數(shù)三種方法
這篇文章主要給大家介紹了關(guān)于springboot后端接收前端傳數(shù)組參數(shù)三種方法,文中通過實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2023-07-07
Hibernatede 一對(duì)多映射配置方法(分享)
下面小編就為大家?guī)硪黄狧ibernatede 一對(duì)多映射配置方法(分享)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-09-09
Spring?Cloud?oauth2?認(rèn)證服務(wù)搭建過程示例
這篇文章主要為大家介紹了Spring?Cloud?oauth2?認(rèn)證服務(wù)搭建過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
mybatis的foreach標(biāo)簽語法報(bào)錯(cuò)的解決
這篇文章主要介紹了mybatis的foreach標(biāo)簽語法報(bào)錯(cuò)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
解決java轉(zhuǎn)義json出現(xiàn)\u0000 等亂碼的問題
這篇文章主要介紹了解決java轉(zhuǎn)義json出現(xiàn)\u0000 等亂碼的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03
Java全版本特性與用法示例(含總覽?+?分版本要點(diǎn))
Java自JDK8開啟現(xiàn)代化演進(jìn)以來,始終遵循半年特性版本+兩年LTS(長期支持)版本的發(fā)布節(jié)奏,持續(xù)在語言表達(dá)力、并發(fā)性能、開發(fā)體驗(yàn)、安全能力四大維度突破,這篇文章主要介紹了Java全版本特性與用法(含總覽+分版本要點(diǎn))的相關(guān)資料,需要的朋友可以參考下2026-05-05
Springboot?配置SqlSessionFactory方式
這篇文章主要介紹了Springboot?配置SqlSessionFactory方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12

