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

Java中關(guān)于size()>0?和isEmpt()的性能考量

 更新時(shí)間:2022年02月28日 11:02:20   作者:布道  
這篇文章主要介紹了Java中關(guān)于size()>0?和isEmpt()性能考量,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

size()>0 和isEmpt()性能考量

為何要寫(xiě)這篇呢?主要是要糾正一個(gè)長(zhǎng)期以來(lái)的誤區(qū):size()>0 一定比isEmpt()性能差。

以下內(nèi)容是社區(qū)里的結(jié)論

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

sonar的規(guī)范是這樣描述:

Collection.isEmpty() should be used to test for emptiness

Using Collection.size() to test for emptiness works, but using Collection.isEmpty() makes the code more readable and can be more performant. The time complexity of any isEmpty() method implementation should be O(1) whereas some implementations of size() can be O(n).

明白了吧!

主要是語(yǔ)義更明確,其實(shí)判斷List、Map、Set是否為空及效率比較真的沒(méi)有多大的必要,確實(shí)是沒(méi)有大多的提升??丛创a:

ArrayList:

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

HashSet:

public int size() {
? ? return map.size();
}
public boolean isEmpty() {
? ? return map.isEmpty();
}

ConcurrentHashMap:

public int size() {
? ? long n = sumCount();
? ? return ((n < 0L) ? 0 :
? ? ? ? ? ? (n > (long)Integer.MAX_VALUE) ? Integer.MAX_VALUE :
? ? ? ? ? ? (int)n);
}
public boolean isEmpty() {
? ? return sumCount() <= 0L; // ignore transient negative values
}

其次,有些時(shí)候確實(shí)它更快,如果你使用了ConcurrentLinkedQueue、NavigableMap、NavigableSet,看源碼:

ConcurrentSkipListMap

public int size() {
? ? long count = 0;
? ? for (Node<K,V> n = findFirst(); n != null; n = n.next) {
? ? ? ? if (n.getValidValue() != null)
? ? ? ? ? ? ++count;
? ? }
? ? return (count >= Integer.MAX_VALUE) ? Integer.MAX_VALUE : (int) count;
}
public boolean isEmpty() {
? ? return findFirst() == null;
}

最后,計(jì)算機(jī)是門(mén)需要刨根問(wèn)底(點(diǎn)進(jìn)源碼看看)的技術(shù)活,不能人云亦云。綜上所述,isEmpt的確是更好的選擇。

list.size() > 0 && list != null 和 list != null && list.size()>0區(qū)別

使用場(chǎng)合

  • list==null; 此時(shí)list還沒(méi)有實(shí)例化(new);
  • list.size()==0; 此時(shí)表明list已經(jīng)實(shí)例化了,但list集合里面沒(méi)有元素,長(zhǎng)度為0

區(qū)別

如果list集合還未實(shí)例化,可用list != null && list.size() > 0進(jìn)行判斷,

如果用list.size() > 0 && list != null 進(jìn)行判斷的話,會(huì)報(bào)異常,因?yàn)閘ist.size()用 在已經(jīng)實(shí)例化的情況下,但現(xiàn)在未實(shí)例化,所以出錯(cuò);

如果list集合已經(jīng)實(shí)例化,則list != null && list.size() > 0 和 list.size() > 0 && list != null 兩者都可以進(jìn)行判斷。

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

相關(guān)文章

  • 關(guān)于遠(yuǎn)程調(diào)用RestTemplate的使用避坑指南

    關(guān)于遠(yuǎn)程調(diào)用RestTemplate的使用避坑指南

    這篇文章主要介紹了關(guān)于遠(yuǎn)程調(diào)用RestTemplate的使用避坑指南,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • Spring Boot集成sa-token的項(xiàng)目實(shí)踐

    Spring Boot集成sa-token的項(xiàng)目實(shí)踐

    本文主要介紹了Spring Boot集成sa-token的項(xiàng)目實(shí)踐,實(shí)現(xiàn)了基本的登錄和權(quán)限控制功能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2024-05-05
  • Spring?Boot實(shí)現(xiàn)熱部署的五種方式

    Spring?Boot實(shí)現(xiàn)熱部署的五種方式

    這篇文章主要介紹了Spring?Boot?五種熱部署方式,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-01-01
  • 淺談Java回收對(duì)象的標(biāo)記和對(duì)象的二次標(biāo)記過(guò)程

    淺談Java回收對(duì)象的標(biāo)記和對(duì)象的二次標(biāo)記過(guò)程

    這篇文章主要介紹了淺談Java回收對(duì)象的標(biāo)記和對(duì)象的二次標(biāo)記過(guò)程的相關(guān)內(nèi)容,小編覺(jué)得還是挺不錯(cuò)的,這里給大家分享一下,需要的朋友可以參考。
    2017-10-10
  • Java多線程同步工具類(lèi)CountDownLatch詳解

    Java多線程同步工具類(lèi)CountDownLatch詳解

    這篇文章主要介紹了Java多線程同步工具類(lèi)CountDownLatch詳解,CountDownLatch是一個(gè)多線程同步工具類(lèi),在多線程環(huán)境中它允許多個(gè)線程處于等待狀態(tài),直到前面的線程執(zhí)行結(jié)束
    2022-06-06
  • mybatis?resultMap沒(méi)有全部對(duì)應(yīng)的字段處理方式

    mybatis?resultMap沒(méi)有全部對(duì)應(yīng)的字段處理方式

    這篇文章主要介紹了mybatis?resultMap沒(méi)有全部對(duì)應(yīng)的字段處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • java?集合工具類(lèi)Collections及Comparable和Comparator排序詳解

    java?集合工具類(lèi)Collections及Comparable和Comparator排序詳解

    這篇文章主要介紹了java集合工具類(lèi)Collections及Comparable和Comparator排序詳解,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-06-06
  • java中流的使用

    java中流的使用

    本文主要介紹了java中流的使用以及分類(lèi)。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-01-01
  • Java中死鎖的原理實(shí)戰(zhàn)分析

    Java中死鎖的原理實(shí)戰(zhàn)分析

    這篇文章主要介紹了Java中死鎖的原理,結(jié)合具體案例形式分析了java死鎖形成的相關(guān)原理,需要的朋友可以參考下
    2019-08-08
  • java 實(shí)現(xiàn)漢諾塔詳解及實(shí)現(xiàn)代碼

    java 實(shí)現(xiàn)漢諾塔詳解及實(shí)現(xiàn)代碼

    這篇文章主要介紹了java 實(shí)現(xiàn)漢諾塔詳解及實(shí)現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04

最新評(píng)論

天台县| 呈贡县| 凌源市| 定边县| 泰顺县| 磐石市| 杭州市| 手机| 正蓝旗| 杭锦后旗| 绥滨县| 临泽县| 金堂县| 杭锦旗| 额敏县| 湛江市| 怀仁县| 通城县| 正定县| 瑞金市| 马山县| 疏附县| 磴口县| 恭城| 太和县| 裕民县| 德江县| 涟水县| 平遥县| 镇原县| 遂平县| 文登市| 商河县| 淮阳县| 吉水县| 祁阳县| 玉树县| 锡林浩特市| 郴州市| 利津县| 临城县|