我需要知道我的数组列表是否有 10 个插槽。调用大小会是一个更快的函数,还是就像第 10 个索引一样?还有什么方法可以让我检查某些功能的速度吗?有点像 phpMyAdmin 如何向您显示查询所需的时间。
if(strideList.size() == 10)
{
}
或者
if(strideList.get(9) != null)
{
}
我需要知道我的数组列表是否有 10 个插槽。调用大小会是一个更快的函数,还是就像第 10 个索引一样?还有什么方法可以让我检查某些功能的速度吗?有点像 phpMyAdmin 如何向您显示查询所需的时间。
if(strideList.size() == 10)
{
}
或者
if(strideList.get(9) != null)
{
}
您应该使用list.size()
,因为这清楚地表明了您的意图。另一段代码实际上是错误的,如果列表有 20 个元素怎么办?strideList.get(9) != null
只检查第九个元素是否不同于null
.
至于检查函数的速度,您可以使用计时器来计算从函数开始到结束所经过的时间量,或者使用称为分析器的特殊软件来查看您的应用程序中哪些函数/代码路径很慢。
基于ArrayList.java
源(其他List
实现将类似),size()
只是int
从对象返回一个成员变量。get()
但是,会进行范围检查,通过 3 或 4 个开销函数,然后进行数组访问,这将需要更多的处理能力。
使用size()
.
(另外,正如@Barış Uşaklı所说,它更具可读性size()
。)
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