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

Collection中的size()和isEmpty()區(qū)別說明

 更新時間:2022年02月28日 10:52:50   作者:BlackButton_CC  
這篇文章主要介紹了Collection中的size()和isEmpty()區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

Collection中的size()和isEmpty()區(qū)別說明

最近才發(fā)現(xiàn)很多網(wǎng)上的“綱領(lǐng)性”的指導(dǎo)完完全全不能相信,比如有的人說isEmpty()判空性能更好,也有的人拿出源碼說這兩個沒區(qū)別。

Collection集合中有十幾種最終實現(xiàn)的類,比如HashMap、ArrayList、TreeSet之類的,如何判空這些集合類是最優(yōu)雅,性能最好的呢?真的好想知道,既然網(wǎng)上沒有那只好自己做測試了。

Collection集合類介紹與實驗

測試的集合類 

類型實現(xiàn)類
MapHashMap、TreeMap、LinkedHashMap
ListArrayList
SetHashSet、TreeSet、LinkedHashSet

Map

HashMap源碼:

//每次put元素
final V putVal(int hash, K key, V value, boolean onlyIfAbsent, boolean evict) {
? ? //省略N行代碼...
? ? ++modCount;
? ? if (++size > threshold) resize();
? ? afterNodeInsertion(evict);
? ? return null;
}
//HashMap的size()函數(shù),復(fù)雜度為O(1)
public int size() { return size; }
//HashMap的isEmpty()函數(shù),復(fù)雜度同為O(1)
public boolean isEmpty() { return size == 0; }

根據(jù)上述源碼可以看到,HashMap在每次put元素時便維護了size字段,size()==0和isEmpty沒任何性能上的區(qū)別。

List

ArrayList源碼:

//每次添加新的元素的邏輯
public boolean add(E e) {
? ? ensureCapacityInternal(size + 1); ?
? ? elementData[size++] = e;
? ? return true;
}
//ArrayList的size()函數(shù),復(fù)雜度為O(1)
public int size() { return size; }
//ArrayList的isEmpty()函數(shù),復(fù)雜度同為O(1)
public boolean isEmpty() { return size == 0; }

可以看到,用size()==0和isEmpty()性能上沒任何區(qū)別。

Set

HashSet相對比較簡單,其內(nèi)部維護了一個HashMap而已:

//內(nèi)部聲明的HashMap與其他函數(shù)
private transient HashMap<E,Object> map;
public int size() { return map.size(); }
public boolean isEmpty() { return map.isEmpty(); }

HashSet的size()==0和isEmpty()也沒有任何性能區(qū)別。

list.size()和list.isEmpty()區(qū)別和效率及CollectionUtils.isEmpty()使用

在實際的開發(fā)中經(jīng)常要操作list

而為了避免空指針異常,我們經(jīng)常需要進行判空操作。一般的寫法是:

if(list!=null && list.size>0){
//進行集合的操作
}
  • 方法一(數(shù)據(jù)量大,效率低): if(list!=null && list.size()>0){}
  • 方法二(數(shù)據(jù)量大,效率高): if(list!=null && !list.isEmpty()){}

查看ArrayList源碼如下

不明白為什么說有效率差距(就先姑且這么記吧,無奈)。

? ? public int size() {
? ? ? ? return size;
? ? }
? ? public boolean isEmpty() {
? ? ? ? return size == 0;
? ? }

大部分框架都會提供CollectionUtils這樣的工具類

比如spring框架

包路徑如下:

package org.springframework.util.CollectionUtils;

使用工具類以后的集合判空操作就簡潔了不少:

if(CollectionUtils.isEmpty()){
//對集合的操作
}

再比如Apache提供的CollectionUtils工具類

maven坐標:

<dependency>
? ? ? ? ? ? <groupId>commons-collections</groupId>
? ? ? ? ? ? <artifactId>commons-collections</artifactId>
? ? ? ? ? ? <version>3.2.2</version>
</dependency>

包路徑:

package org.apache.commons.collections;

使用工具類以后的集合判空操作就簡潔了不少:

if(CollectionUtils.isEmpty()){
//對集合的操作
}

或者

if(CollectionUtils.isNotEmpty()){
//對集合的操作
}

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

相關(guān)文章

  • SpringBoot中獲取profile的方法詳解

    SpringBoot中獲取profile的方法詳解

    這篇文章主要介紹了springboot獲取profile的操作,文中的示例代碼講解詳細,具有很好的參考價值,希望對大家有所幫助
    2022-04-04
  • spring boot+vue 的前后端分離與合并方案實例詳解

    spring boot+vue 的前后端分離與合并方案實例詳解

    這篇文章主要介紹了spring boot+vue 的前后端分離與合并方案實例詳解,需要的朋友可以參考下
    2017-11-11
  • java集合中l(wèi)ist的用法代碼示例

    java集合中l(wèi)ist的用法代碼示例

    這篇文章主要介紹了java集合中l(wèi)ist的用法代碼示例,分享了相關(guān)代碼,具有一定參考價值,需要的朋友可以了解下。
    2017-11-11
  • 使用maven對springboot項目進行瘦身分離jar的多種處理方案

    使用maven對springboot項目進行瘦身分離jar的多種處理方案

    springboot項目打包一般我們都使用它自帶的spring-boot-maven-plugin插件,這個插件默認情況下,會把所有的依賴包全部壓縮到一個jar里面,今天給大家分享幾種方案來如何減小我們的打包文件,需要的朋友可以參考下
    2024-02-02
  • Spring 單元測試中如何進行 mock的實現(xiàn)

    Spring 單元測試中如何進行 mock的實現(xiàn)

    這篇文章主要介紹了Spring 單元測試中如何進行 mock的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • Java數(shù)組去重復(fù)的18種方法示例

    Java數(shù)組去重復(fù)的18種方法示例

    這篇文章主要為大家介紹了Java數(shù)組去重復(fù)的18種寫法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-08-08
  • SpringBoot+Apache tika實現(xiàn)文檔內(nèi)容解析的示例詳解

    SpringBoot+Apache tika實現(xiàn)文檔內(nèi)容解析的示例詳解

    Apache tika是Apache開源的一個文檔解析工具,本文主要為大家介紹了如何在springboot中引入tika的方式解析文檔,感興趣的小伙伴可以了解一下
    2023-07-07
  • Spring后處理器詳細介紹

    Spring后處理器詳細介紹

    Bean后置處理器允許在調(diào)用初始化方法前后對Bean進行額外的處理??梢栽?Spring容器通過插入一個或多個BeanPostProcessor的實現(xiàn)來完成實例化,配置和初始化一個?bean?之后實現(xiàn)一些自定義邏輯回調(diào)方法
    2023-02-02
  • Java  Object類中的常用API介紹

    Java  Object類中的常用API介紹

    這篇文章主要介紹了Java  Object類中的常用API介紹,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-11-11
  • Java設(shè)計模式之接口隔離原則精解

    Java設(shè)計模式之接口隔離原則精解

    設(shè)計模式(Design pattern)代表了最佳的實踐,通常被有經(jīng)驗的面向?qū)ο蟮能浖_發(fā)人員所采用。設(shè)計模式是軟件開發(fā)人員在軟件開發(fā)過程中面臨的一般問題的解決方案。本篇介紹設(shè)計模式七大原則之一的接口隔離原則
    2022-02-02

最新評論