亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java實(shí)戰(zhàn)小技巧之?dāng)?shù)組與list互轉(zhuǎn)

 更新時間:2021年08月10日 14:50:41   作者:一灰灰  
在Java中,經(jīng)常遇到需要List與數(shù)組互相轉(zhuǎn)換的場景,下面這篇文章主要給大家介紹了關(guān)于Java實(shí)戰(zhàn)小技巧之?dāng)?shù)組與list互轉(zhuǎn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

前言

這個考題比較常見,也比較簡單,難道就這也有什么可以說到的門路不成?

接下來本文好好的說一說它的幾種實(shí)現(xiàn)姿勢,總有一款你喜歡的

I. 數(shù)組轉(zhuǎn) List

1. Array.asList

這個考題太簡單了,直接使用Array.asList不就完事了么,比如

@Test
public void ary2list() {
    String[] ary = new String[]{ "1", "a"};
    List<String> list = Arrays.asList((ary);
    System.out.println(list);
}

數(shù)組轉(zhuǎn) list,so easy!!!

真的就這么簡單么???

且看下面這一段代碼

public void ary2list() {
    String[] ary = new String[]{ "1", "a"};
    List<String> list = Arrays.asList((ary);
    System.out.println(list);

    list.add("c");
    System.out.println(list);
}

直接拋出了異常java.lang.UnsupportedOperationException

有興趣的小伙伴可以看一下源碼實(shí)現(xiàn)方式,通過Arrays.asList創(chuàng)建的 List,雖說也命名是ArrayList,但是它的全路徑為 java.util.Arrays.ArrayList, 不支持add, remove等操作(所以下次再有面試官問 ArrayList 的知識點(diǎn)時,就可以反問一句,老哥你指的是哪個 ArrayList😝,逼格是不是立馬拉起來)

1.1 知識點(diǎn)

通過Arrays.asList創(chuàng)建的列表,不允許新增,刪除元素;但是可以更新列表中元素的值

2. new ArrayList

上面的數(shù)組轉(zhuǎn) list 方式雖然是最簡單的,但不一定是合適的,特別是當(dāng)我們可能對轉(zhuǎn)換后的 list 進(jìn)行操作時,可能埋坑(而且這種坑還非常隱晦,代碼層面上很難發(fā)現(xiàn))

為了減少在代碼里面下毒的可能性,不妨使用下面這種方式new ArrayList<>(Arrays.asList(ary))

String[] ary = new String[]{ "1", "a"};
List<String> out = new ArrayList<>(Arrays.asList(ary));
out.add("hello");
System.out.println(out);

通過上面這種方式創(chuàng)建的 List,就是我們熟知的ArrayList了

2.1 避雷預(yù)警

看到上面這個使用姿勢,就很容易想到一個常見的踩雷點(diǎn),比如我們的應(yīng)用中,有一個全局共享的配置列表,張三需要拿 id 為奇數(shù)的配置,李四拿 id 為偶數(shù)的配置,然后他們都是這么做的

list.removeIf(s -> s.id % 2 == 0);

然后跑了一次之后發(fā)現(xiàn)這個全局的列表清空了,這就是典型的沒有做好資源隔離的 case 了,針對這種場景,要么是限制使用方,直接針對全局的資源進(jìn)行修改,要么就是使用方拿到的是一個隔離的備份

禁止修改:

  • 使用不可變的容器,如前面提到的java.util.Arrays.ArrayList ()
  • 使用Collections.unmodifiableList創(chuàng)建
List<String> unModifyList = Collections.unmodifiableList(out);

列表拷貝

new ArrayList<>(Arrays.asList(ary));

(上面這種屬于深拷貝的實(shí)現(xiàn),具體可以看一下 jdk 的源碼實(shí)現(xiàn))

3. Collections.addAll

第三種方式借助 jdk 提供的容器工具類Collections來實(shí)現(xiàn)

@Test
public void ary2listV3() {
    String[] ary = new String[]{ "1", "a"};
    // 創(chuàng)建列表,并指定長度,避免可能產(chǎn)生的擴(kuò)容
    List<String> out = new ArrayList<>(ary.length);
    // 實(shí)現(xiàn)數(shù)組添加到列表中
    Collections.addAll(out, ary);

    // 因?yàn)榱斜頌槲覀兌x的ArrayList,因此可以對它進(jìn)行增刪改
    out.add("hello");
    System.out.println(out);
}

原則上是比較推薦這種方式來實(shí)現(xiàn)的,至于為啥?看下源碼實(shí)現(xiàn)

public static <T> boolean addAll(Collection<? super T> c, T... elements) {
    boolean result = false;
    for (T element : elements)
        result |= c.add(element);
    return result;
}

這段代碼的實(shí)現(xiàn)是不是非常眼熟,如果讓我們自己來寫,也差不多會寫成這樣吧,簡單直觀高效,完美

II. 列表轉(zhuǎn)數(shù)組

不同于數(shù)組轉(zhuǎn)列表的幾種玩法,列表轉(zhuǎn)數(shù)組就簡單多了,直接調(diào)用List.toArray

List<String> list = Arrays.asList("a", "b", "c");
// 返回的是Object[] 數(shù)組
Object[] cell = list.toArray();

// 如果需要指定數(shù)組類型,可以傳一個指定各類型的空的數(shù)組
// 也可以傳一個與目標(biāo)列表長度相等的數(shù)組,這樣會將列表中的元素拷貝到這個數(shù)組中
String[] strCell = list.toArray(new String[]{});

III. 小結(jié)

今天的博文主題是數(shù)組與列表的互轉(zhuǎn),雖說題目簡單,但是實(shí)現(xiàn)方式也是多種,需要搞清楚它們之間的本質(zhì)區(qū)別,一不小心就可能采坑,而最簡單的地方掉坑里,往往是最難發(fā)現(xiàn)和爬出來的

核心知識點(diǎn)小結(jié)如下

數(shù)組轉(zhuǎn) list:

  • Arrays.asList(xxx):創(chuàng)建的是不可變列表,不能刪除和新增元素
  • new ArrayList<>(Arrays.asList(xxx): 相當(dāng)于用列表創(chuàng)建列表,屬于深拷貝的一種表現(xiàn),獲取到的列表支持新增、刪除
  • 推薦寫法 Collections.addAll()

列表轉(zhuǎn)數(shù)組

  • list.toArray: 如果需要指定數(shù)組類型,則傳參指定

總結(jié)

到此這篇關(guān)于Java實(shí)戰(zhàn)小技巧之?dāng)?shù)組與list互轉(zhuǎn)的文章就介紹到這了,更多相關(guān)Java數(shù)組與list互轉(zhuǎn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mybatis如何實(shí)現(xiàn)in傳入數(shù)組查詢

    mybatis如何實(shí)現(xiàn)in傳入數(shù)組查詢

    這篇文章主要介紹了mybatis如何實(shí)現(xiàn)in傳入數(shù)組查詢方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Mybatis中的自定義映射resultMap

    Mybatis中的自定義映射resultMap

    在MyBatis中,自定義映射resultMap可以讓你精確控制如何將數(shù)據(jù)庫返回的結(jié)果集映射到Java對象上,本文給介紹了Mybatis之自定義映射resultMap,需要的朋友可以參考下
    2024-03-03
  • java對象拷貝詳解及實(shí)例

    java對象拷貝詳解及實(shí)例

    這篇文章主要介紹了java對象拷貝詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • Java求兩個正整數(shù)的最大公約數(shù)和最小公倍數(shù)

    Java求兩個正整數(shù)的最大公約數(shù)和最小公倍數(shù)

    這篇文章主要介紹了輸入兩個正整數(shù)m和n,求其最大公約數(shù)和最小公倍數(shù),需要的朋友可以參考下
    2017-02-02
  • Mybatis中TypeAliasRegistry的作用及使用方法

    Mybatis中TypeAliasRegistry的作用及使用方法

    Mybatis中的TypeAliasRegistry是一個類型別名注冊表,它的作用是為Java類型建立別名,使得在Mybatis配置文件中可以使用別名來代替完整的Java類型名。使用TypeAliasRegistry可以簡化Mybatis配置文件的編寫,提高配置文件的可讀性和可維護(hù)性
    2023-05-05
  • Java修改PowerPoint幻燈片批注信息

    Java修改PowerPoint幻燈片批注信息

    這篇文章主要介紹了Java修改PowerPoint幻燈片批注信息,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-05-05
  • 從零開始學(xué)SpringBoot如何開始使用圖文詳解

    從零開始學(xué)SpringBoot如何開始使用圖文詳解

    這篇文章主要介紹了從零開始學(xué)SpringBoot如何開始使用,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-09-09
  • SpringBoot項(xiàng)目使用aop案例詳解

    SpringBoot項(xiàng)目使用aop案例詳解

    這篇文章主要介紹了SpringBoot項(xiàng)目使用aop的相關(guān)知識,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • 源碼解讀Spring-Integration執(zhí)行過程

    源碼解讀Spring-Integration執(zhí)行過程

    Spring-Integration基于Spring,在應(yīng)用程序中啟用了輕量級消息傳遞,并支持通過聲明式適配器與外部系統(tǒng)集成,今天主要是看個簡單的hello word進(jìn)來分析下整個執(zhí)行過程,感興趣的朋友一起看看吧
    2021-06-06
  • SpringBoot實(shí)現(xiàn)獲取客戶端IP地理位置

    SpringBoot實(shí)現(xiàn)獲取客戶端IP地理位置

    在當(dāng)今互聯(lián)的世界中,了解客戶端的地理位置對于提供個性化服務(wù)和增強(qiáng)用戶體驗(yàn)至關(guān)重要,使用本文為大家介紹了SpringBoot獲取客戶端IP地理位置的相關(guān)方法,需要的小伙伴可以參考下
    2023-11-11

最新評論