Java 确定列表大小的最快方法
我需要知道我的arraylist是否有10个插槽。调用大小是更快的函数,还是像调用第10个索引一样更快?还有什么方法可以让我检查某些功能的速度吗?有点像phpMyAdmin如何向您显示执行查询所需的时间Java 确定列表大小的最快方法,java,Java,我需要知道我的arraylist是否有10个插槽。调用大小是更快的函数,还是像调用第10个索引一样更快?还有什么方法可以让我检查某些功能的速度吗?有点像phpMyAdmin如何向您显示执行查询所需的时间 if(strideList.size() == 10) { } 或 您应该使用list.size(),因为这清楚地显示了您的意图。另一段代码实际上是错误的,如果列表有20个元素呢移动列表。获取(9)!=null只检查第九个元素是否与null不同 至于检查函数的速度,您可以使用计时器计算从函数
if(strideList.size() == 10)
{
}
或
您应该使用
list.size()
,因为这清楚地显示了您的意图。另一段代码实际上是错误的,如果列表有20个元素呢<代码>移动列表。获取(9)!=null只检查第九个元素是否与null
不同
至于检查函数的速度,您可以使用计时器计算从函数开始到结束的时间量,或者使用称为探查器的特殊软件查看应用程序中哪些函数/代码路径较慢。您应该使用
list.size()
,因为这清楚地显示了您的意图。另一段代码实际上是错误的,如果列表有20个元素呢<代码>移动列表。获取(9)!=null只检查第九个元素是否与null
不同
至于检查函数的速度,您可以使用计时器来计算从函数开始到结束所经过的时间量,或者使用称为探查器的特殊软件来查看应用程序中哪些函数/代码路径较慢。基于(其他列表
实现将类似),size()
仅从对象返回一个int
成员变量<但是,code>get()执行范围检查,执行3或4个开销函数,然后执行阵列访问,这将占用更多的处理能力
使用size()
(另外,如上所述,size()
)更易于阅读。基于(其他列表
实现将类似),size()
仅从对象返回一个int
成员变量<但是,code>get()执行范围检查,执行3或4个开销函数,然后执行阵列访问,这将占用更多的处理能力
使用size()
(另外,如前所述,使用size()
)更具可读性)StradList.get(9)将抛出IndexOutOfBoundsException
,并且将比list.size()
花费更多的时间
但是需要注意的是get(int index)
的代码。其中包括两个步骤
1.rangeCheck,它正好与您从size()中获取的大小相匹配
2.如果范围大于大小,则抛出异常,这是额外花费的时间
3.如果大小不大于大小,则它将从数组中获取。
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
StradList.get(9)将抛出一个IndexOutOfBoundsException
,并且比list.size()
但是需要注意的是get(int index)
的代码。其中包括两个步骤
1.rangeCheck,它正好与您从size()中获取的大小相匹配
2.如果范围大于大小,则抛出异常,这是额外花费的时间
3.如果大小不大于大小,则它将从数组中获取。
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
出于好奇,我认为这是相关的,为什么尽快进行尺寸检查如此重要?此外,为了获得速度增益,为什么值得牺牲确保尺寸正好为10的能力?我认为这是出于好奇,为什么尽快进行尺寸检查如此重要?此外,为什么为了获得速度增益而牺牲确保大小正好为10的能力是值得的?列表中不可能有超过10个元素。我在循环中填充列表。知道这一点后,后者将是最好的选择吗?不,我仍然会使用更容易阅读的版本size
。在知道这一部分是瓶颈之前,不要担心优化代码。让它工作,然后让它可读,然后如果它没有足够快的作业优化。没有办法列表可以有超过10个元素。我在循环中填充列表。知道这一点后,后者将是最好的选择吗?不,我仍然会使用更容易阅读的版本size
。在知道这一部分是瓶颈之前,不要担心优化代码。让它工作,然后让它可读,然后如果它没有足够快的工作优化。谢谢。我甚至没想到索引会超出范围!“我甚至不认为索引超出范围!”-如果你不知道方法的作用,你应该阅读javadocs。谢谢。我甚至没想到索引会超出范围!“我甚至不认为索引超出了范围!”-如果你不知道方法的作用,你应该阅读javadocs。