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

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坐標(biāo):

<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)文章

  • Spring?Boot?整合?Fisco?Bcos的案例分析(區(qū)塊鏈)

    Spring?Boot?整合?Fisco?Bcos的案例分析(區(qū)塊鏈)

    本篇文章介紹的?Spring?Boot?整合?Fisco?Bcos的案例,是在阿里云服務(wù)器上部署驗證的。大家可根據(jù)自己的電腦環(huán)境,對比該案例進行開發(fā)即可,具體案例代碼跟隨小編一起看看吧
    2022-01-01
  • Java運算符的常見問題與用法小結(jié)

    Java運算符的常見問題與用法小結(jié)

    這篇文章主要介紹了Java運算符,結(jié)合實例形式總結(jié)分析了Java各種常見運算符,包括算術(shù)運算符、比較運算符、邏輯運算符、位運算符等相關(guān)功能、原理與使用技巧,需要的朋友可以參考下
    2020-04-04
  • SpringBoot中的@EnableConfigurationProperties注解詳細解析

    SpringBoot中的@EnableConfigurationProperties注解詳細解析

    這篇文章主要介紹了SpringBoot中的@EnableConfigurationProperties注解詳細解析,如果一個配置類只配置@ConfigurationProperties注解,而沒有使用@Component或者實現(xiàn)了@Component的其他注解,那么在IOC容器中是獲取不到properties 配置文件轉(zhuǎn)化的bean,需要的朋友可以參考下
    2024-01-01
  • Java的JSTL標(biāo)簽庫詳解

    Java的JSTL標(biāo)簽庫詳解

    JSTL包含用于編寫和開發(fā)JSP頁面的一組標(biāo)準標(biāo)簽,它可以為用戶提供一個無腳本環(huán)境。在此環(huán)境中,用戶可以使用標(biāo)簽編寫代碼,而無須使用Java腳本
    2023-05-05
  • Spring Boot 集成 Quartz 使用Cron 表達式實現(xiàn)定時任務(wù)

    Spring Boot 集成 Quartz 使用Cron 表達式實現(xiàn)定

    本文介紹了如何在SpringBoot項目中集成Quartz并使用Cron表達式進行任務(wù)調(diào)度,通過添加Quartz依賴、創(chuàng)建Quartz任務(wù)、配置任務(wù)調(diào)度以及啟動項目,可以實現(xiàn)定時任務(wù)的執(zhí)行,Cron表達式提供了靈活的任務(wù)調(diào)度方式,適用于各種復(fù)雜的定時任務(wù)需求,感興趣的朋友一起看看吧
    2025-03-03
  • SpringBoot中@Conditional注解的介紹及實踐

    SpringBoot中@Conditional注解的介紹及實踐

    在 Spring Boot 中,@Conditional 注解用于實現(xiàn) 條件化 Bean 裝配,本文將詳細介紹 @Conditional 相關(guān)的注解,并結(jié)合實際應(yīng)用示例講解其使用方式,感興趣的小伙伴可以了解下
    2025-03-03
  • Springboot微服務(wù)分布式框架Rouyi Cloud權(quán)限認證(登錄流程之token解析)

    Springboot微服務(wù)分布式框架Rouyi Cloud權(quán)限認證(登錄流程之token解析)

    這篇文章主要介紹了Springboot微服務(wù)分布式框架Rouyi Cloud權(quán)限認證的相關(guān)知識,重點講解下整個框架的入口,登錄流程之token解析,感興趣的朋友跟隨小編一起看看吧
    2024-04-04
  • Mybatis-Plus 官方神器發(fā)布

    Mybatis-Plus 官方神器發(fā)布

    mybatis-mate 為 mp 企業(yè)級模塊,支持分庫分表,數(shù)據(jù)審計、數(shù)據(jù)敏感詞過濾(AC算法),字段加密,字典回寫(數(shù)據(jù)綁定),數(shù)據(jù)權(quán)限,表結(jié)構(gòu)自動生成 SQL 維護等,旨在更敏捷優(yōu)雅處理數(shù)據(jù),今天介紹一個 MyBatis - Plus 官方發(fā)布的神器,感興趣的朋友一起看看吧
    2021-11-11
  • Java泛型之類型擦除實例詳解

    Java泛型之類型擦除實例詳解

    Java泛型在使用過程有諸多的問題,如不存在List<String>.class,List<Integer>不能賦值給List<Number>(不可協(xié)變),奇怪的ClassCastException等,這篇文章主要給大家介紹了關(guān)于Java泛型之類型擦除的相關(guān)資料,需要的朋友可以參考下
    2022-01-01
  • 列舉java語言中反射的常用方法及實例代碼

    列舉java語言中反射的常用方法及實例代碼

    反射機制指的是程序在運行時能夠獲取自身的信息。這篇文章主要介紹了列舉java語言中反射的常用方法,需要的朋友可以參考下
    2019-07-07

最新評論

韶关市| 应用必备| 乌鲁木齐市| 米易县| 枣强县| 大安市| 呼玛县| 虹口区| 嘉峪关市| 辽中县| 班玛县| 灵台县| 平昌县| 呼和浩特市| 闻喜县| 象州县| 吴旗县| 翁牛特旗| 略阳县| 札达县| 灯塔市| 大田县| 四川省| 沾益县| 抚宁县| 平谷区| 梨树县| 怀来县| 陈巴尔虎旗| 宜春市| 珠海市| 卫辉市| 长治市| 丰台区| 扎囊县| 大冶市| 四平市| 临沧市| 萨迦县| 微博| 巨野县|