最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中List.of()和Arrays.asList()的區(qū)別及原因分析

 更新時間:2021年09月02日 14:43:32   作者:愛唱歌的瓜皮  
這篇文章主要介紹了Java中List.of()和Arrays.asList()的區(qū)別及原因分析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Java中List.of()和Arrays.asList()的區(qū)別及原因

動手寫一下,讓自己更有印象

1.Arrays.asList()可以插入null

而List.of()不可以

import java.util.List;
import java.util.Arrays;
class Solution {
    public static void main(String[] args) {
     List<Integer> ls1 = Arrays.asList(1, 2, null);
     //List<Integer> ls2 = List.of(1,2,null);
     System.out.println(ls1);
     //System.out.println(ls2);
    }
}
 
/*結果
[1, 2, null]
*/
import java.util.List;
import java.util.Arrays;
class Solution {
    public static void main(String[] args) {
     //List<Integer> ls1 = Arrays.asList(1, 2, null);
     List<Integer> ls2 = List.of(1,2,null);
     //System.out.println(ls1);
     System.out.println(ls2);
    }
}
 
/*結果
Exception in thread "main" java.lang.NullPointerException.....
*/

2.用List.of的List自然是不包含null

而用Arrays.asList的List包含null。上面結果也可得知。

import java.util.List;
import java.util.Arrays;
class Solution {
    public static void main(String[] args) {
     List<Integer> ls1 = Arrays.asList(1, 2, null);
     //List<Integer> ls2 = List.of(1,2);
     System.out.println(ls1.contains(null));
     //System.out.println(ls2.contains(null));
    }
}
 
/*結果
true
*/
import java.util.List;
import java.util.Arrays;
class Solution {
    public static void main(String[] args) {
     //List<Integer> ls1 = Arrays.asList(1, 2, null);
     List<Integer> ls2 = List.of(1,2);
     //System.out.println(ls1.contains(null));
     System.out.println(ls2.contains(null));
    }
}
 
/*結果
Exception in thread "main" java.lang.NullPointerException.....
*/

3.List.of生成的List不能修改

Arrays.asList生成的List能修改。

import java.util.List;
import java.util.Arrays;
class Solution {
    public static void main(String[] args) {
     List<Integer> ls1 = Arrays.asList(1, 2, null);
     //List<Integer> ls2 = List.of(1,2);
     ls1.set(0,5);
     //ls2.set(0,5);
     System.out.println(ls1);
     //System.out.println(ls2);
    }
}
 
/*結果
[5, 2, null]
*/
import java.util.List;
import java.util.Arrays;
class Solution {
    public static void main(String[] args) {
     //List<Integer> ls1 = Arrays.asList(1, 2, null);
     List<Integer> ls2 = List.of(1,2);
     //ls1.set(0,5);
     ls2.set(0,5);
     //System.out.println(ls1);
     System.out.println(ls2);
    }
}
 
/*結果
Exception in thread "main" java.lang.UnsupportedOperationExceptio.....
*/

4.關于數(shù)組修改對List的影響

數(shù)組修改對Arrays.asList生成的List有影響,對List.of 生成的List無影響

import java.util.List;
import java.util.Arrays;
class Solution {
    public static void main(String[] args) {
     Integer[] a = new Integer[]{1,2,3,4};
        // 不能用int[],會導致轉型錯誤,錯誤: 不兼容的類型: 推論變量 T 具有不兼容的上限
     List<Integer> ls1 = Arrays.asList(a);
     //List<Integer> ls2 = List.of(a);
     System.out.println(ls1);
     //System.out.println(ls2);
     a[0] = 5;
     //ls2.set(0,5);
     System.out.println(ls1);
     //System.out.println(ls2);
    }
}
 
/*結果
[1, 2, 3, 4]
[5, 2, 3, 4]
*/
import java.util.List;
import java.util.Arrays;
class Solution {
    public static void main(String[] args) {
     Integer[] a = new Integer[]{1,2,3,4};
     //List<Integer> ls1 = Arrays.asList(a);
     List<Integer> ls2 = List.of(a);
     //System.out.println(ls1);
     System.out.println(ls2);
     a[0] = 5;
     //ls2.set(0,5);
     //System.out.println(ls1);
     System.out.println(ls2);
    }
}
 
/*結果
[1, 2, 3, 4]
[1, 2, 3, 4]
*/

原因

關于List.of為什么不能插入null,和修改了原數(shù)組不影響到List.of生成的List。先看看List.of有關的源碼

   @SafeVarargs
    @SuppressWarnings("varargs")
    static <E> List<E> of(E... elements) {
        switch (elements.length) { // implicit null check of elements
            case 0:
                return ImmutableCollections.emptyList();
            case 1:
                return new ImmutableCollections.List12<>(elements[0]);
            case 2:
                return new ImmutableCollections.List12<>(elements[0], elements[1]);
            default:
                return new ImmutableCollections.ListN<>(elements);
        }
    }
//---------------------------------------------------------------------------------------
    @Stable
        private final E[] elements;    
 
    @SafeVarargs
        ListN(E... input) {
            // copy and check manually to avoid TOCTOU
            @SuppressWarnings("unchecked")
            E[] tmp = (E[])new Object[input.length]; // implicit nullcheck of input
            for (int i = 0; i < input.length; i++) {
                tmp[i] = Objects.requireNonNull(input[i]);
            }
            elements = tmp;
        }
 
//---------------------------------------------------------------------------------------
 
    public static <T> T requireNonNull(T obj) {
        if (obj == null)
            throw new NullPointerException();
        return obj;
    }

可以看到Objects.requireNonNull()。所以不能插入空值。

E[] tmp = (E[])new Object[input.length];表示新建了個新的數(shù)組對象,所以修改了原數(shù)組,不影響生成的LIst底層的數(shù)組。

返回的數(shù)組是個final類型的,所以不能修改

再看看Arrays.asList源碼

    @SafeVarargs
    @SuppressWarnings("varargs")
    public static <T> List<T> asList(T... a) {
        return new ArrayList<>(a);
    }
 
//----------------------------------------------------------------------------------------
 
    ArrayList(E[] array) {
            a = Objects.requireNonNull(array);
        }
 
//----------------------------------------------------------------------------------------
 
    public static <T> T requireNonNull(T obj) {
        if (obj == null)
            throw new NullPointerException();
        return obj;
    }

由源碼可知,底層的數(shù)組就是傳入的數(shù)組,所以對原數(shù)組的修改會影響到用Arrays.asList方法生成的List。而且Objects.requireNonNull(array)檢查的是整個數(shù)組是不是null,而非對每個元素進行檢查是否為null。所以用Arrays.asList方法可以插入空值。

也沒有規(guī)定是final的,所以支持修改。

java listof報錯處理

List.of()生成不可變數(shù)組(字符串也行)

是在jdk1.8以后才出現(xiàn)的,在jdk1.9版本及以后才能運行。

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • SpringBoot3實現(xiàn)優(yōu)雅停機的完整流程

    SpringBoot3實現(xiàn)優(yōu)雅停機的完整流程

    在現(xiàn)代微服務架構中,優(yōu)雅停機(Graceful Shutdown)是一項重要功能,可以確保服務在關閉時處理完所有當前請求,避免突然終止連接或丟失數(shù)據,Spring Boot 3 提供了對優(yōu)雅停機的內置支持,本文給大家介紹了SpringBoot3怎樣優(yōu)雅停機,需要的朋友可以參考下
    2024-10-10
  • feign調用第三方接口,編碼定義GBK,響應中文亂碼處理方式

    feign調用第三方接口,編碼定義GBK,響應中文亂碼處理方式

    這篇文章主要介紹了feign調用第三方接口,編碼定義GBK,響應中文亂碼處理方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Java類加載機制實現(xiàn)步驟解析

    Java類加載機制實現(xiàn)步驟解析

    這篇文章主要介紹了Java類加載機制實現(xiàn)步驟解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • 使用Java實現(xiàn)在Excel中創(chuàng)建下拉列表

    使用Java實現(xiàn)在Excel中創(chuàng)建下拉列表

    下拉列表(下拉框)可以確保用戶僅從預先給定的選項中進行選擇,這樣不僅能減少數(shù)據輸入錯誤,還能節(jié)省時間提高效率,下面我們就來看看如何在java中利用免費庫實現(xiàn)創(chuàng)建下拉列表吧
    2024-03-03
  • Java關于遠程調試程序教程(以Eclipse為例)

    Java關于遠程調試程序教程(以Eclipse為例)

    這篇文章主要介紹了Java關于遠程調試程序教程(以Eclipse為例),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-06-06
  • java開發(fā)https請求ssl不受信任問題解決方法

    java開發(fā)https請求ssl不受信任問題解決方法

    這篇文章主要介紹了java開發(fā)https請求ssl不受信任問題解決方法,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • java 利用HttpClient PostMethod提交json數(shù)據操作

    java 利用HttpClient PostMethod提交json數(shù)據操作

    這篇文章主要介紹了java 利用HttpClient PostMethod提交json數(shù)據操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-01-01
  • Spring?AI聊天功能開發(fā)步驟

    Spring?AI聊天功能開發(fā)步驟

    本文給大家介紹Spring?AI聊天功能開發(fā)步驟,首先引入依賴,繼承父版本的springboot依賴,最好是比較新的依賴,結合實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • java中自定義線程池最佳實踐教程

    java中自定義線程池最佳實踐教程

    自定義線程池的最佳實踐包括:合理配置線程池大小、選擇合適的隊列類型、設置合理的拒絕策略、理解核心線程和非核心線程的區(qū)別、定期監(jiān)控和調優(yōu)、避免死鎖、使用合適的線程工廠、設計高效的任務、使用現(xiàn)有的線程池實現(xiàn)以及合理處理超時和中斷
    2025-03-03
  • Java同步容器和并發(fā)容器詳解

    Java同步容器和并發(fā)容器詳解

    這篇文章主要介紹了Java同步容器和并發(fā)容器詳解,容器是Java基礎類庫中使用頻率最高的一部分,Java集合包中提供了大量的容器類來幫組我們簡化開發(fā),下面小編和大家來一起學習下吧
    2019-06-06

最新評論

阜南县| 望江县| 白沙| 兴安盟| 永登县| 黄山市| 邹平县| 古浪县| 阳曲县| 介休市| 建始县| 沈丘县| 长白| 澄城县| 大连市| 海林市| 太和县| 梨树县| 互助| 台北县| 理塘县| 宁都县| 壶关县| 安泽县| 雷山县| 湖州市| 斗六市| 涟源市| 江陵县| 金塔县| 连江县| 富蕴县| 义马市| 贺兰县| 丰镇市| 田阳县| 清水河县| 元阳县| 格尔木市| 平顺县| 和顺县|