相关疑难解决方法(0)

何时在Java中使用LinkedList而不是ArrayList?

我一直只是一个人使用:

List<String> names = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

我使用接口作为可移植性的类型名称,因此当我问这些问题时,我可以重新编写代码.

何时应该LinkedList使用,ArrayList反之亦然?

java collections linked-list arraylist

2974
推荐指数
27
解决办法
102万
查看次数

如果在列表中间插入,LinkedList是否真的比ArrayList快?

- LinkedList和之间有什么区别ArrayList?什么时候最好使用LinkedList

我认为每个Java开发人员至少在面试时都听过一次这个问题.

- 如果您希望能够在列表中间插入项目,则最好使用链接列表.

这是这个问题的常见答案.大家都知道.每当你问一个关于List实现之间差异的问题时,你会得到如下答案:

我什么时候应该使用LinkedList?什么时候需要在元素之间或开始时有效删除?

从这里

忘了提到插入费用.在LinkedList中,一旦你有正确的位置,插入成本O(1),而在ArrayList中它会上升到O(n)- 必须移动经过插入点的所有元素.

从这里

当您希望能够在列表中间插入项目(例如优先级队列)时,链接列表优于数组.

从这里

ArrayList较慢,因为它需要复制部分数组才能删除已经空闲的插槽.LinkedList只需要操作几个引用.

从这里

和更多...

但你有没有试过自己重现它?我昨天试过并得到了这些结果:

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class Test {
    public static void main(String... args) {
        final int MAX_VAL = 10000;
        List<Integer> linkedList = new LinkedList<Integer>();
        List<Integer> arrayList = new ArrayList<Integer>();
        for(int i = 0; i < MAX_VAL; i++) {
            linkedList.add(i);
            arrayList.add(i);
        }
        long time = System.nanoTime();
        for(int i = 0; i < MAX_VAL; …
Run Code Online (Sandbox Code Playgroud)

java collections

18
推荐指数
2
解决办法
9192
查看次数

哪一个运行得更快,ArrayList或LinkedList?

List li = new LinkedList();

for (int i = 0; i &lt; 100; i++) {
    li.add(i);
}

long start1 = System.nanoTime();
li.get(57);

long end1 = System.nanoTime();
long diff1 = end1-start1;

System.out.println("Time taken by LinkedList = "+diff1);

List al = new ArrayList();
for (int i = 0; i < 100; i++) {
    al.add(i);
}
Run Code Online (Sandbox Code Playgroud)

我在两个列表上执行的操作,当我打印出所用的时间时,ArrayList总是比LinkedList运行得更快.有人可以解释哪个时间表现更好吗?如果代码中有问题,请告诉我.谢谢!

java collections performance linked-list arraylist

14
推荐指数
1
解决办法
3万
查看次数

测量时间并不能确认LinkedList的优势

我正在阅读之间的不同之处ArrayListLinkedList指出何时使用LinkedList而不是ArrayList?.我开发了一个小的示例applcation来测试一个主要的优点LinkedList但是我获得的结果没有证实,这LinkedList超过ArrayList了操作的性能:

ListIterator.add(E element)
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

public static void main(String[] args) {

        int number = 100000;

        long startTime1 = System.currentTimeMillis();
        fillLinkedList(number);
        long stopTime1 = System.currentTimeMillis();

        long startTime2 = System.currentTimeMillis();
        fillArrayList(number);
        long stopTime2 = System.currentTimeMillis();

        System.out.println(" LinkedList needed: "+ (stopTime1 - startTime1));
        System.out.println(" ArrayList needed: "+ (stopTime2 - startTime2));

    }


    public static void fillLinkedList(int number){

        LinkedList<Integer> list = new LinkedList<Integer>();
        ListIterator<Integer> it = list.listIterator();
        int i = 0;
        while(i++<number){
            it.add(i);
        } …
Run Code Online (Sandbox Code Playgroud)

java linked-list arraylist listiterator

6
推荐指数
1
解决办法
236
查看次数