为什么在Java中,list.size()>0比list.isEmpty()慢?
为什么在Java中,list.size()>0比list.isEmpty()慢?
为什么在Java中list.size()>0
比list.isEmpty()
慢?换句话说,为什么isEmpty()
比size()>0
更可取?
当我查看ArrayList
的实现时,它们的速度应该是相同的:
ArrayList.size()
/** * 返回此列表中的元素数。 * * @return 此列表中的元素数 */ public int size() { return size; }
ArrayList.isEmpty()
/** * 如果此列表不包含任何元素,则返回true。 * * @return 如果此列表不包含任何元素,则返回true */ public boolean isEmpty() { return size == 0; }
如果我们编写一个简单的程序来获取这两种方法所需的时间,那么size()
在所有情况下都比isEmpty()
花费更多的时间,为什么会这样?
这是我的测试代码:
import java.util.List; import java.util.Vector; public class Main { public static void main(String[] args) { List l=new Vector(); int i=0; for(i=0;i<10000;i++){ l.add(new Integer(i).toString()); } System.out.println(i); Long sTime=System.nanoTime(); l.size(); Long eTime=System.nanoTime(); l.isEmpty(); Long eeTime=System.nanoTime(); System.out.println(eTime-sTime); System.out.println(eeTime-eTime); } }
在所有情况下,eTime-sTime>eeTime-eTime
。为什么?