Java中ArrayList單行初始化的多種方法
Java中ArrayList的單行初始化方法
技術背景
在Java開發(fā)中,我們經(jīng)常需要初始化列表,尤其是ArrayList,用于存儲和管理數(shù)據(jù)。為了提高代碼的簡潔性和可讀性,我們希望能在一行代碼內(nèi)完成ArrayList的初始化。本文將介紹多種在Java中單行初始化ArrayList的方法。
實現(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)建一個不可變大小的List
List<String> places = Arrays.asList("Buenos Aires", "Córdoba", "La Plata");
// 若需要可變的ArrayList,可進一步轉換
ArrayList<String> mutablePlaces = new ArrayList<>(places);
}
}
Arrays.asList方法會返回一個固定大小的列表,若要得到可變的ArrayList,可將其作為參數(shù)傳遞給ArrayList的構造函數(shù)。
2. 使用雙括號初始化
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");
}};
}
}
雙括號初始化實際上創(chuàng)建了一個ArrayList的匿名子類,并在實例初始化塊中添加元素。不過這種方法會創(chuàng)建額外的類,可能會帶來一些性能開銷。
3. 使用List.of方法(Java 9及以上)
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
// 創(chuàng)建一個不可變的List
List<String> places = List.of("Buenos Aires", "Córdoba", "La Plata");
// 若需要可變的ArrayList,可進一步轉換
ArrayList<String> mutablePlaces = new ArrayList<>(places);
}
}
List.of方法會返回一個不可變的列表,若要得到可變的ArrayList,同樣可將其作為參數(shù)傳遞給ArrayList的構造函數(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)建一個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方法將流轉換為列表。
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。
核心代碼
以下是一個綜合示例,展示了上述多種方法的使用:
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);
// 使用雙括號初始化
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");
}
}
最佳實踐
- 選擇合適的方法:根據(jù)項目的Java版本和具體需求選擇合適的初始化方法。如果是Java 9及以上版本,推薦使用
List.of方法;如果需要靈活處理元素,可使用StreamAPI。 - 考慮可變性:如果列表需要在后續(xù)進行修改,確保初始化的列表是可變的。如使用
Arrays.asList和List.of返回的列表是不可變的,需要進一步轉換為ArrayList。 - 避免過度依賴外部庫:雖然Guava庫提供了方便的方法,但如果項目中沒有引入該庫,不建議為了初始化
ArrayList而引入它。
常見問題
1. Arrays.asList和List.of的區(qū)別
Arrays.asList返回的列表是固定大小的,可通過set方法修改元素,但不能添加或刪除元素;List.of返回的列表是不可變的,任何修改操作都會拋出異常。Arrays.asList允許傳入null元素,而List.of不允許。
2. 雙括號初始化的缺點
雙括號初始化會創(chuàng)建一個匿名子類,增加了類的數(shù)量和內(nèi)存開銷,同時可能導致內(nèi)存泄漏。因此,不建議在性能敏感的場景中使用。
3. Stream API的性能問題
使用Stream API初始化列表可能會帶來一定的性能開銷,尤其是在處理大量元素時。因此,在性能要求較高的場景中,應謹慎使用。
到此這篇關于Java中實現(xiàn)ArrayList單行初始化的方法的文章就介紹到這了,更多相關Java ArrayList單行初始化內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
springboot后端接收前端傳數(shù)組參數(shù)三種方法
這篇文章主要給大家介紹了關于springboot后端接收前端傳數(shù)組參數(shù)三種方法,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2023-07-07
Spring?Cloud?oauth2?認證服務搭建過程示例
這篇文章主要為大家介紹了Spring?Cloud?oauth2?認證服務搭建過程示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-06-06
解決java轉義json出現(xiàn)\u0000 等亂碼的問題
這篇文章主要介紹了解決java轉義json出現(xiàn)\u0000 等亂碼的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-03-03
Springboot?配置SqlSessionFactory方式
這篇文章主要介紹了Springboot?配置SqlSessionFactory方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-12-12

