欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java.util.Collections類—emptyList()方法的使用

 更新時間:2021年11月17日 08:46:11   作者:DobyJin  
這篇文章主要介紹了java.util.Collections類—emptyList()方法的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Collections是列表的工具類,其中有好多方便實(shí)用的方法。主要是對列表的查找、替換、排序、反轉(zhuǎn)等操作。今天介紹一下emptyList()方法的使用,因?yàn)檫@個方法有一個大坑!

emptyList()方法的使用

通過java.util.Collections.emptyList()方法的相關(guān)源碼可以得知它實(shí)際上就是返回了一個空的List,但是這個List和我們平時常用的那個List是不一樣的。這個方法返回的List是Collections類的一個靜態(tài)內(nèi)部類,它繼承AbstractList后并沒有實(shí)現(xiàn)add()、remove()等方法,因此這個返回值List并不能增加刪除元素。

既然這個List不能進(jìn)行增刪操作,那么它有何意義呢?

這個方法主要目的就是返回一個不可變的列表,使用這個方法作為返回值就不需要再創(chuàng)建一個新對象,可以減少內(nèi)存開銷。并且返回一個size為0的List,調(diào)用者不需要校驗(yàn)返回值是否為null,所以建議使用這個方法返回可能為空的List。

emptySet()、emptyMap()方法同理。

   /**
     * The empty list (immutable).  This list is serializable.
     *
     * @see #emptyList()
     */
    public static final List EMPTY_LIST = new EmptyList();
    /**
     * Returns the empty list (immutable).  This list is serializable.
     *
     * <p>This example illustrates the type-safe way to obtain an empty list:
     * <pre>
     *     List&lt;String&gt; s = Collections.emptyList();
     * </pre>
     * Implementation note:  Implementations of this method need not
     * create a separate <tt>List</tt> object for each call.   Using this
     * method is likely to have comparable cost to using the like-named
     * field.  (Unlike this method, the field does not provide type safety.)
     *
     * @see #EMPTY_LIST
     * @since 1.5
     */
    public static final <T> List<T> emptyList() {
    return (List<T>) EMPTY_LIST;
    }
    /**
     * @serial include
     */
    private static class EmptyList extends AbstractList<Object> implements RandomAccess,Serializable {
    // use serialVersionUID from JDK 1.2.2 for interoperability
    private static final long serialVersionUID = 8842843931221139166L;
        public int size() {return 0;}
        public boolean contains(Object obj) {return false;}
        public Object get(int index) {
            throw new IndexOutOfBoundsException("Index: "+index);
        }
        // Preserves singleton property
        private Object readResolve() {
            return EMPTY_LIST;
        }
    }

java.util.Collections.emptyList()方法的測試

public class CollectionsTest {
    public static void main(String[] a) {
        List<Integer> list = new ArrayList<Integer>();
        list.add(1);
        list.add(2);
        System.out.println(list);
        list = Collections.emptyList();
        System.out.println(list);
        list.add(3);
    }
}
//執(zhí)行結(jié)果
[1, 2]
Exception in thread "main" java.lang.UnsupportedOperationException
    at java.util.AbstractList.add(AbstractList.java:131)
    at java.util.AbstractList.add(AbstractList.java:91)[]
    at com.jiuqi.pay.importfile.test.CollectionsTest.main(CollectionsTest.java:22)

Java Collections.emptyList()方法的注意事項(xiàng)

emptyList()

作用:返回一個空的List(使用前提是不會再對返回的list進(jìn)行增加和刪除操作);

好處

1. new ArrayList()創(chuàng)建時有初始大小,占用內(nèi)存,emptyList()不用創(chuàng)建一個新的對象,可以減少內(nèi)存開銷;

2. 方法返回一個emptyList()時,不會報空指針異常,如果直接返回Null,沒有進(jìn)行非空判斷就會報空指針異常;

注意:此List與常用的List不同,它是Collections類里的靜態(tài)內(nèi)部類,在繼承AbstractList后并沒有實(shí)現(xiàn)add()、remove()等方法,所以返回的List不能進(jìn)行增加刪除元素操作。

示例

 @Test
    public void test1() {
        String str = "";
        List<String> list = getList(str);
        System.out.println(list.size());
    }
    private static List<String> getList(String str) {
        if (StringUtils.isBlank(str)) {
            // 使用時不會報空指針
            return Collections.emptyList();
            // 使用null報空指針異常
//            return null; 
        }
        List<String> list = new ArrayList<String>();
        list.add(str);
        return list;
    }

增刪操作

 @Test
    public void test2() {
        String str = "abc";
        List<String> list = Collections.emptyList();
        list.add(str);
        System.out.println(list.size());
    }

結(jié)果

在這里插入圖片描述

如果需要對collections.emptyList()進(jìn)行增刪操作的話,就需要將collections.emptyList()轉(zhuǎn)換成ArrayList()進(jìn)行操作。

示例:

 @Test
    public void test2() {
        String str = "abc";
        List<String> list = Collections.emptyList();
        List<String> resultList = new ArrayList<>(list);
        resultList.add(str);
        System.out.println(resultList.size());
        System.out.println(resultList);
    }

結(jié)果:

在這里插入圖片描述

以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java使用定時器編寫一個簡單的搶紅包小游戲

    Java使用定時器編寫一個簡單的搶紅包小游戲

    這篇文章主要為大家介紹了Java如何使用定時器編寫一個簡單的搶紅包小游戲,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下
    2022-07-07
  • 使用JSON.toJSONString()返回{}的原因

    使用JSON.toJSONString()返回{}的原因

    這篇文章主要介紹了使用JSON.toJSONString()返回{}的原因,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 安卓系統(tǒng)中實(shí)現(xiàn)搖一搖畫面振動效果的方法

    安卓系統(tǒng)中實(shí)現(xiàn)搖一搖畫面振動效果的方法

    這篇文章主要介紹了安卓系統(tǒng)中實(shí)現(xiàn)搖一搖畫面振動效果的方法,調(diào)用Android SDK中的SensorEventListener接口,需要的朋友可以參考下
    2015-07-07
  • Java object wait notify notifyAll代碼解析

    Java object wait notify notifyAll代碼解析

    這篇文章主要介紹了Java object wait notify notifyAll代碼解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • 理解Java注解及Spring的@Autowired是如何實(shí)現(xiàn)的

    理解Java注解及Spring的@Autowired是如何實(shí)現(xiàn)的

    今天通過本文帶領(lǐng)大家學(xué)習(xí)注解的基礎(chǔ)知識,學(xué)習(xí)Spring的@Autowired是怎么實(shí)現(xiàn)的,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-07-07
  • 使用maven實(shí)現(xiàn)redis與idea的連接問題

    使用maven實(shí)現(xiàn)redis與idea的連接問題

    這篇文章主要介紹了使用maven實(shí)現(xiàn)redis與idea的連接問題,本文通過示例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • SpringCloud?Feign使用ApacheHttpClient代替默認(rèn)client方式

    SpringCloud?Feign使用ApacheHttpClient代替默認(rèn)client方式

    這篇文章主要介紹了SpringCloud?Feign使用ApacheHttpClient代替默認(rèn)client方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • SpringBoot使用classfinal-maven-plugin插件加密Jar包的示例代碼

    SpringBoot使用classfinal-maven-plugin插件加密Jar包的示例代碼

    這篇文章給大家介紹了SpringBoot使用classfinal-maven-plugin插件加密Jar包的實(shí)例,文中通過代碼示例和圖文講解的非常詳細(xì),對大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-02-02
  • Spring整合Junit的使用詳解

    Spring整合Junit的使用詳解

    這篇文章主要介紹了Spring整合Junit的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-02-02
  • 解析Java的InputStream類并借助其讀取ppt文件

    解析Java的InputStream類并借助其讀取ppt文件

    這篇文章主要介紹了Java的InputStream類并借助其讀取ppt文件,講到了InputStream類中一些常用的方法的問題,需要的朋友可以參考下
    2015-11-11

最新評論