Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在LinkedList java中测量搜索时间_Java_Algorithm_Data Structures_Linked List - Fatal编程技术网

如何在LinkedList java中测量搜索时间

如何在LinkedList java中测量搜索时间,java,algorithm,data-structures,linked-list,Java,Algorithm,Data Structures,Linked List,我需要测量不同值的LinkedList的搜索时间。我的解决方案不符合逻辑,因此我不知道我是否走在正确的道路上。 这是我的解决方案 LinkedList<Integer> myList = new LinkedList<>(); for (int i = 1; i <= 1000; i++) myList.add(i); Collections.shuffle(myList); Random rand = new Ran

我需要测量不同值的LinkedList的搜索时间。我的解决方案不符合逻辑,因此我不知道我是否走在正确的道路上。 这是我的解决方案

    LinkedList<Integer> myList = new LinkedList<>();
    for (int i = 1; i <= 1000; i++)
        myList.add(i);
    Collections.shuffle(myList);
    Random rand = new Random();
    myList.contains(rand.nextInt(myList.size()));
    System.out.println(System.nanoTime());

    LinkedList<Integer> myList2 = new LinkedList<>();
    for (int i = 1; i <= 2000; i++)
        myList2.add(i);
    Collections.shuffle(myList2);
    myList.contains(rand.nextInt(myList2.size()));
    System.out.println(System.nanoTime());
LinkedList myList=新建LinkedList();

对于(int i=1;i你不能像这样衡量性能。计算机不可靠;不是今天,几十年来都不可靠。操作系统先发制人。JVM JIT。CPU有内核。内核有管道和分层缓存。你真是倒霉透了;一个
之间的纳米时间包含
绝对不是一回事——这就像试图测量通过检查阿姆斯特丹码头上海水的高度,可以确定火奴鲁鲁有人在水中撒尿的效果。其中还涉及到大约十亿个其他因素,这些因素的影响程度要大得多

衡量绩效的一般原则是标记时间,做某件事,然后再次标记时间。时间差是多少?这就是所花的时间。但你必须运行操作,不是一次,而是多次(然后取平均值),并且在它运行几次之前不要认真考虑计时,以确保缓存线和JIT进程稳定。您还需要确保VM hotspot引擎不会优化整个代码,因此您还必须实际使用结果(您正在丢弃
包含的
返回的
布尔值
;这可能会导致热点引擎意识到它可以消除整个调用,因为它不可能更改列表

总之,这对于任何java新手来说都是完全不可能的;即使是一个头发花白的老手也极有可能做错,因为这是关于计时的,所以很难“测试”您的计时框架是否实际工作

幸运的是,你不必写它。你要么使用它,要么是它的直接竞争对手,或者你几乎肯定会从你的计时代码中得到完全的谎言和捏造


请注意,
Random
的参与对于计时来说是一个非常糟糕的主意;您希望正在计时的代码尽可能可靠。因此,不要乱洗列表,也不要要求随机数。每次都要求一个特定的数字,或一组数字,或者复制列表,乱洗,然后搜索每个数字-这就是我输入列表中的所有数字只搜索一次,但顺序是任意的。

你不能像这样衡量性能。计算机不可靠;现在不可靠,几十年来都不可靠。操作系统先发制人。JVM JIT。CPU有内核。内核有管道和分层缓存。你运气不好;纳米时间介于两者之间n一个
包含的
绝对不能说一件事-这就像通过检查阿姆斯特丹码头上海水的高度来衡量火奴鲁鲁人在水中撒尿的效果。其中还涉及到大约十亿个在数量上更令人印象深刻的其他因素

衡量绩效的一般原则是标记时间,做某件事,然后再次标记时间。时间差是多少?这就是所花的时间。但你必须运行操作,不是一次,而是多次(然后取平均值),并且在它运行几次之前不要认真考虑计时,以确保缓存线和JIT进程稳定。您还需要确保VM hotspot引擎不会优化整个代码,因此您还必须实际使用结果(您正在丢弃
包含的
返回的
布尔值
;这可能会导致热点引擎意识到它可以消除整个调用,因为它不可能更改列表

总之,这对于任何java新手来说都是完全不可能的;即使是一个头发花白的老手也极有可能做错,因为这是关于计时的,所以很难“测试”您的计时框架是否实际工作

幸运的是,你不必写它。你要么使用它,要么是它的直接竞争对手,或者你几乎肯定会从你的计时代码中得到完全的谎言和捏造


请注意,
Random
的参与对于计时来说是一个非常糟糕的主意;您希望正在计时的代码尽可能可靠。因此,不要乱洗列表,也不要要求随机数。每次都要求一个特定的数字,或一组数字,或者复制列表,乱洗,然后搜索每个数字-这就是我表示输入列表中的所有数字只搜索一次,但顺序任意。

比较搜索前后的纳米时间,这将告诉您搜索花费了多长时间。@AdrianRusso,这将告诉您JVM基于多个变量运行代码花费了多长时间。比较搜索前后的纳米时间,并这应该可以告诉您搜索花费了多长时间。@AdrianRusso这将告诉您JVM基于多个变量运行代码花费了多长时间。我知道这个时间取决于太多的变量。但是这个任务对我来说是必须的,所以我正试图尽可能获得最稳定的输出顺序。谢谢您的解释性回答。好的,那么,使用JMH。什么样的答案是:“好的,我所做的是完全没有意义的,但我必须做”.不,你不想。想测量性能吗?下载JMH并使用它。不要找借口。我知道这个时间取决于太多的变量。但是这个任务对我来说是必须的,所以我试图尽可能获得最稳定的输出顺序。谢谢你的解释性回答。好的,那么,使用JMH。什么样的答案是:“好吧,我所做的完全没有意义,但我必须去做。”不,你不想。想要衡量性能吗?下载JMH并使用它。不要找借口。