栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

ArrayList与LinkedList

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

ArrayList与LinkedList

请记住,big-
O复杂性描述的是渐近行为,可能无法反映实际的实现速度。它描述了每个操作的成本如何随列表的大小而增加,而不是每个操作的速度。例如,下面的实现

add
是O(1),但速度不快:

public class MyList extends linkedList {    public void add(Object o) {        Thread.sleep(10000);        super.add(o);    }}

我怀疑在您的情况下ArrayList表现良好,因为它相当大地增加了其内部缓冲区的大小,因此不会有大量的重新分配。当不需要调整缓冲区大小时,ArrayList将具有更快的

add
s。

在进行此类分析时,还需要非常小心。我建议您更改配置文件代码以进行预热阶段(这样,JIT就有机会进行一些优化而不影响您的结果),并在多次运行中平均结果。

private final static int WARMUP = 1000;private final static int TEST = 1000;private final static int SIZE = 500000;public void perfTest() {    // Warmup    for (int i = 0; i < WARMUP; ++i) {        buildArrayList();    }    // Test    long sum = 0;    for (int i = 0; i < TEST; ++i) {        sum += buildArrayList();    }    System.out.println("Average time to build array list: " + (sum / TEST));}public long buildArrayList() {    long start = System.nanoTime();    ArrayList a = new ArrayList();    for (int i = 0; i < SIZE; ++i) {        a.add(i);    }    long end = System.nanoTime();    return end - start;}... same for buildlinkedList

(请注意,

sum
可能会溢出,因此最好使用
System.currentTimeMillis()
)。

编译器也有可能正在优化空

get
循环。确保循环实际上执行了某些操作,以确保调用正确的代码。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/485833.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号