java – 在if,else-if或else中放入最可能的真实条件有什么不同
将最可能的条件放在if,else-if或else条件中是否有任何区别
例如: int[] a = {2,4,6,9,10,30,31,66} int firstCase = 0,secondCase = 0,thirdCase = 0; for( int i=0;i<10;i++ ){ int m = a[i] % 5; if(m < 3) { firstCase++; } else if(m == 3) { secondCase++; } else { thirdCase++; } } 执行时间与输入的区别是什么 int[] a = {3,8,7,0} 解决方法
实际上,Java的答案是“它取决于”. 您可以看到,当您运行Java代码时,JVM会在收集统计信息时使用解释器启动.可以记录的统计之一是最常采用分支指令中的哪些路径.然后,JIT编译器可以使用这些统计信息来影响代码重新排序,这不会改变编译代码的语义. 因此,如果您要使用两个不同的数据集(即“大多数为零”和“大多数非零”)执行代码,则JIT编译器可能会以不同方式编译代码. 它是否能够实际进行此优化取决于它是否能够确定重新排序是否有效.例如,它可以推断出被测试的条件是互斥的吗? 那么这会如何影响复杂性呢?好吧……让我们为简化的例子做总结,假设JIT编译器没有做任何“智能”的事情.并假设我们不只是处理长度为10的数组(这使得复杂性的讨论没有实际意义). 考虑一下: >对于每个零,循环执行一次测试和一次增量 – 比如说2次操作. 因此,当所有零对3 * N操作都是非零时,对于N个元素大约是2 * N个操作.但两者都是O(N)……所以Big O的复杂性不受影响. (好吧,我留下了一些东西……但是你得到了图片.其中一个案例会更快,但复杂性不受影响.) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |