我需要知道我的arraylist是否有10个插槽。调用大小是否更快,或者与第10个索引一样?还有什么方法让我检查某些功能的速度?有点像phpMyAdmin可以显示查询所需的时间。
if(strideList.size() == 10)
{
}
OR
if(strideList.get(9) != null)
{
}
答案 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