确定列表大小的最快方法

时间:2013-03-03 03:47:05

标签: java

我需要知道我的arraylist是否有10个插槽。调用大小是否更快,或者与第10个索引一样?还有什么方法让我检查某些功能的速度?有点像phpMyAdmin可以显示查询所需的时间。

if(strideList.size() == 10)
{

}

OR

if(strideList.get(9) != null)
{

}

3 个答案:

答案 0 :(得分:4)

您应该使用list.size()因为这清楚地表明了您的意图。如果列表有20个元素,那么另一段代码实际上是错误的? strideList.get(9) != null只检查第九个元素是否与null不同。

至于检查函数的速度,您可以使用计时器来计算从函数开始到结束传递的时间量,或者使用称为分析器的特殊软件来查看应用程序中哪些函数/代码路径很慢。

答案 1 :(得分:4)

基于ArrayList.java source(其他List实现将类似),size()只返回对象中的int成员变量。但是,get()进行范围检查,经过3或4个开销函数,然后进行数组访问,这将获得更多的处理能力。

使用size()

(另外,正如@Barış Uşaklı所述,size()更具可读性。)

答案 2 :(得分:1)

strideList.get(9)将抛出IndexOutOfBoundsException,并且比list.size()花费更多时间 但需要注意的是get(int index)的代码。涉及两个步骤 1. rangeCheck与你size()的大小相匹配 2.如果范围大于size,则抛出Exception,这是额外的时间 3.如果大小不大于大小,那么它将从Array获得。 ArrayList的代码:

    public E get(int index) {
    382           rangeCheck(index);
    383   
    384           return elementData(index);
    385       }

  private void rangeCheck(int index) {
   603           if (index >= size)
   604               throw new IndexOutOfBoundsException(outOfBoundsMsg(index));
   605       }
   606   


     E elementData(int index) {
      371           return (E) elementData[index];
      372       }
      373