1

我需要知道我的数组列表是否有 10 个插槽。调用大小会是一个更快的函数,还是就像第 10 个索引一样?还有什么方法可以让我检查某些功能的速度吗?有点像 phpMyAdmin 如何向您显示查询所需的时间。

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

}

或者

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

}
4

3 回答 3

4

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

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

于 2013-03-03T03:51:34.837 回答
4

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

使用size().

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

于 2013-03-03T03:53:37.917 回答
1

strideList.get(9) 将抛出 aIndexOutOfBoundsException并且将花费更多时间list.size() 但是要注意的一点是get(int index). 涉及两个步骤 1. rangeCheck 仅匹配您从中得到的大小size() 2. 如果范围大于 size ,则抛出异常,这是额外的时间 3. 如果大小不大于 size ,则它将从数组中获取。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   
于 2013-03-03T04:06:18.867 回答