为什么最后执行的方法总是更快?

时间:2019-04-05 11:24:07

标签: java performance

我正在学习二进制搜索树,并想比较两种插入方法的性能(基本概念相同,但实现方式略有不同)。

我在调用方法前后存储了时间(以纳秒为单位),并打印出差异。这样,即使颠倒了调用方法的顺序,执行first的方法所需的时间也总是更长。

公用代码:-

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] terms = Arrays.stream(br.readLine().split("\\s+")).mapToInt(Integer::parseInt).toArray();
BST tree = new BST();

过程1 :-

long t1 = System.nanoTime();
Arrays.stream(terms).forEach(tree::insert);
long t2 = System.nanoTime();
tree = new BST();
long t3 = System.nanoTime();
Arrays.stream(terms).forEach(tree::insert1);
long t4 = System.nanoTime();
System.out.println("insert ->" + (t2 - t1) + "\ninsert1->" + (t4 - t3));

程序2 :-

long t1 = System.nanoTime();
Arrays.stream(terms).forEach(tree::insert1);
long t2 = System.nanoTime();
tree = new BST();
long t3 = System.nanoTime();
Arrays.stream(terms).forEach(tree::insert);
long t4 = System.nanoTime();
System.out.println("insert1->" + (t2 - t1) + "\ninsert ->" + (t4 - t3));

输入:-12 23 34 45 56 67 78 89 90
输出
程序1:-
insert ->2155125
insert1->431351
程序2:-
insert1->2608819
insert ->546649

如何解决此问题?

0 个答案:

没有答案