list.size()>0 && !list.isEmpty() 性能比较疑问???

rink 发布于 2015/03/17 16:25
阅读 2K+
收藏 0

无意中看到 判断List、Map、Set是否为空及效率比较,处于好奇打开该博客看到其中一段代码这样描述


方法一(数据量大,效率低): if(list!=null && list.size()>0){
}

方法二(数据量大,效率高): if(list!=null && !list.isEmpty()){
}


查看ArrayList源码如下,不明白为什么那个博主会得出上面的结论。

    public int size() {
        return size;
    }

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

加载中
0
yunfound
yunfound

有毛蛋的效率差距!!!从语言层面来说,list.size() 就是多出了两个数据,分配了两个内存。

这点操作,貌似没多少差距!

rink
rink
反正我是愣住了,硬是没理解
0
songtzu
songtzu

好吧,楼主你赢了。

一般人还真没研究其源码的。赞一个。

rink
rink
上班闲来无事,重点是那博主来个数据量大的时候效率高。真没懂得怎么会有这个结论
0
be-quiet
be-quiet
哈哈哈,说明他是猜的
rink
rink
关键是也没给理由,只有结论。
0
Jerikc
Jerikc
http://stackoverflow.com/questions/1508975/why-is-list-size0-slower-than-list-isempty-in-java
rink
rink
很不解的是为什么说是数据量大的时候呢会出现差距呢?看源码都是 return size == 0
甘薯
甘薯
还真老外研究过这个问题...
0
骑乌龟捉鱼
骑乌龟捉鱼
估计是 第二次因为第一次 size cpu缓存了 第二次直接在cpu命中了size 直接比较 速度第二次<第一次
返回顶部
顶部