为什么 list.isEmpty()
list.size()>0
慢?换句话说,为什么 isEmpty()
优于 size()>0
?
当我查看 ArrayList
中的实现时,看起来速度应该是相同的:
ArrayList.size()
/**
* Returns the number of elements in this list.
*
* @return the number of elements in this list
*/
public int size() {
return size;
}
ArrayList.isEmpty()
/**
* Returns <tt>true</tt> if this list contains no elements.
*
* @return <tt>true</tt> if this list contains no elements
*/
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
在所有情况下。为什么?
原文由 Ashish Agarwal 发布,翻译遵循 CC BY-SA 4.0 许可协议
您的测试代码有缺陷。
只需颠倒顺序,即首先调用 isEmpty 和 size > 0 秒,您将得到 相反 的结果。这是由于类加载、缓存等。