isempty和size有什么区别,collection.isEmpty
00-1010集合中size()和isEmpty()的区别说明了集合类的引入与实验list.size()和list.isEmpty()以及使用CollectionUtils.isEmpty()的区别和效率。在实际开发中,你经常要操作list来查看如下的ArrayList源代码
00-1010最近发现很多网上的“程序化”指南完全不可信。比如有人说isEmpty()有更好的air判断性能,也有人拿出源代码说两者没有区别。
Collection中最终实现的类有十几个,比如HashMap、ArrayList、TreeSet等等。如何判断这些集合类是最优雅的,性能最好的?我很想知道,既然网上没有,那我只好自己做测试了。
目录
测试的集合类
类型实现类MapHashMap,TreeMap,linkedhashmaplistarraylistsethashset,TreeSet,linkedhashsetMap
HashMap源代码:
//每次put元素final v put val (int hash,k key,v value,boolean only lyifabsent,boolean evil){//省略n行代码.modCountif(大小阈值)resize();afterNodeInsertion(驱逐);返回null}//HashMap的size()函数复杂度为O(1)public int size(){ return size;}//HashMap的isEmpty()函数,复杂度与O(1)public boolean isEmpty(){ return size==0;}根据上面的源代码可以看出,HashMap每次放置元素都维护size字段,size()==0和isEmpty没有性能差异。
List
数组列表源代码:
//每次添加新元素时逻辑public boolean add(e e){ ensurecapacityinternal(size 1);element data[size]=e;返回true}//ArrayList的size()函数,复杂度为O(1)public int size(){ return size;}//ArrayList的isEmpty()函数,复杂度与O(1)public boolean isEmpty(){ return size==0;}可以看到使用size()==0和isEmpty()在性能上没有区别。
Set
HashSet相对简单,它在内部维护一个HashMap:
//内部声明hashmap等函数私有瞬态HashMap,objectmappublic int size(){ return map . size();} public boolean isEmpty(){ return map . isEmpty();} size()=0和{ HashSet }的isEmpty()没有性能差异。
Collection中的size()和isEmpty()区别说明
00-1010并且为了避免空指针的异常,我们经常需要判断空。一般的写法是:
如果(列表!=null list . size 0){//set }方法1的运算(数据量大,效率低):if(list!=null list.size()0){}方法二(数据量大效率高):if(list!=null!list.isEmpty()){}
00-1010不明白为什么说效率差距(暂时就写下来吧,无奈)。
public int size(){ return size;} public boolean isEmpty(){ return size==0;}大多数框架都会提供CollectionUtils之类的工具类。
比如spring框架
包路径如下所示:
包org . spring framework . util . collection utils;使用工具类后,设置空判断操作就简单多了:
if(collection utils . isempty()){//集合上的操作}再比如Apache提供的CollectionUtils工具类
Maven坐标:
依赖关系groupid commons-collections/groupid工件commons-collections/工件id版本3 . 2 . 2/version/依赖关系包路径:
包org . Apache.commons . collections;使用工具类后,设置空判断操作就简单多了:
if(collection utils . isempty()){//对集合的操作}或
If (CollectionUtils。is not empty()){//集合的操作}以上是我的个人经验。希望大家能给我一个参考,支持盛行的IT。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。