为什么在Java中,list.size()>0比list.isEmpty()慢?

10 浏览
0 Comments

为什么在Java中,list.size()>0比list.isEmpty()慢?

为什么在Java中list.size()>0list.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。为什么?

0