我一直只是一个人使用:
List<String> names = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
我使用接口作为可移植性的类型名称,因此当我问这些问题时,我可以重新编写代码.
何时应该LinkedList使用,ArrayList反之亦然?
对于LinkedList
- 得到的是O(n)
- 加是O(1)
- 删除是O(n)
- Iterator.remove是O(1)
对于ArrayList
- 得到的是O(1)
- add是O(1)摊销,但O(n)最坏情况,因为必须调整和复制数组
- 删除是O(n)
因此,通过观察这一点,我得出结论,如果我只是在我的集合中为5000000个元素执行顺序插入,那么LinkedList将会超出ArrayList.
如果我只是通过迭代来获取集合中的元素,即不在中间抓取元素,仍然LinkedList会超出`ArrayList.
现在要验证我的上述两个陈述,我在下面写了示例程序...但我很惊讶我的上述陈述被证明是错误的.
ArrayListLinkedlist在两个案件中都超过了.花费的时间少于LinkedList添加以及从Collection中获取它们所花费的时间.有什么我做错了,或有关初步陈述LinkedList和ArrayList尺寸为500万的收藏品不成立?
我提到了尺寸,因为如果我将元素数量减少到50000,那么LinkedList表现更好,初始语句也成立.
long nano1 = System.nanoTime();
List<Integer> arr = new ArrayList();
for(int i = 0; i < 5000000; ++i) {
arr.add(i);
}
System.out.println( (System.nanoTime() - nano1) );
for(int j : arr) {
;
}
System.out.println( (System.nanoTime() - nano1) );
long nano2 = System.nanoTime();
List<Integer> arrL = new …Run Code Online (Sandbox Code Playgroud) 我想使用需要不时排序的数据结构.数据结构的大小几乎不会超过1000个项目.
哪一个更好 - ArrayList或者LinkedList?
哪种排序算法更好用?