我需要知道以下哪种ArrayList
方法对性能最友好:
arrayList.add(index,Object)
arrayList.clear()
我遇到的情况是我必须选择将1个元素添加到非空arraylist的第一个位置,或者只是清除整个arrayList。你会选择什么?
答案 0 :(得分:1)
这取决于ArrayList中的项目如何。最糟糕的情况是,有很多项目,数组列表应该扩展/缩小。在这种情况下,clear()方法是最快的。另外2个涉及System.arrayCopy旧数组到新数组。
答案 1 :(得分:0)
使用Big-Oh notation,我们可以概括ArrayList
类中方法的时间复杂度。
对于ArrayList<>
,可以按如下方式定义以下操作:
get()
的时间复杂度为O(1)
add()
,clear()
和remove()
的时间复杂度均为O(n)
removeAll()
的时间复杂度为O(n^2)
由此可以看出,get()
具有最小的时间复杂度,并且不依赖于列表的大小来执行它的方式。您还应该注意add()
,clear()
和remove()
都以线性时间运行 - 这不是很有效,但通常不会被视为对性能不利。
运行size,isEmpty,get,set,iterator和listIterator操作 在恒定的时间。添加操作以分摊的常量时间运行, 也就是说,添加n个元素需要O(n)时间。所有其他的 操作以线性时间运行(粗略地说)。不变因素 与LinkedList实现相比较低。
Big O表示法是一种描述算法速度的方法 运行给定任意数量的输入参数,我们将调用
n
。它在计算机科学中很有用,因为它不同 以不同的速度运行,简单地说算法需要 5秒不会告诉你太多,因为你可能正在运行一个 系统采用4.5 Ghz多核处理器,我可能运行了15年 旧的800 Mhz系统,无论如何都可能需要更长的时间 算法。因此,而不是指定算法运行的速度 时间,我们说它在输入参数或
n
的数量方面运行的速度有多快。通过这种方式描述算法,我们可以比较 算法的速度,而不必考虑速度 电脑本身。