java:List.contains()与手动搜索的性能差异

 奶牛还在Henry 发布于 2023-02-12 11:41

我试图证明之间的差异,List.contains()并手动搜索执行时间,结果很棒.这是代码,

public static void main(String argv[]) {
    List list = new ArrayList();
    list.add("a");
    list.add("a");
    list.add("a");
    list.add("a");
    list.add("a");
    list.add("a");
    list.add("b");

    long startTime = System.nanoTime();

    list.contains("b");

    long endTime = System.nanoTime();
    long duration = endTime - startTime;

    System.out.println("First run: "+duration);

    startTime = System.nanoTime();
    for(String s: list){
        if(s.equals("b"))
            break;
    }
    endTime = System.nanoTime();

    duration = endTime - startTime;
    System.out.println("Second run: "+duration);

}

输出:

首次运行:7500

第二轮:158685

    contains()函数如何产生如此大的差异?

    它使用哪种搜索算法?

    如果列表包含搜索到的元素,它会在第一个元素处终止搜索吗?

torquestomp.. 9

首先,相信来自单一测试的结果是不明智的.有太多的可变因素,要考虑的缓存含义以及其他类似的事情 - 您应该考虑编写一种在某种程度上使用随机化而不是试验的测试,并执行数百万次不同的检查,而不仅仅是一次.

那就是说,我希望你的结果会保持不变; ArrayList实现contains()使用其自己的indexOf()方法,它直接循环它存储底层阵列上.你可以在这里看到这个

另一方面,foreach循环需要实例化a Iterator,通过其所有方法访问数组,并且通常比ArrayList自己的直接实现做更多的工作.但是,再次,你应该更彻底地对它进行基准测试!

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有