android java循环与语句哪一种性能更好? 我之所以问这个问题是因为考虑下面的情景:

android java循环与语句哪一种性能更好? 我之所以问这个问题是因为考虑下面的情景:,java,android,Java,Android,在我的android应用程序中,如果有10个项目,那么选择3个项目时,我会检查当前范围。例如,如果当前范围为3到5(即第3、第4和第5项),则我希望以不同的方式处理少于3项(即0到2项)的项目,并以不同的方式处理大于3项的项目,以不同的方式处理范围项目(即第3、第4和第5项)。所以我可以用两种方法来做: 第一种方法)使用多个for循环,如: for(int i=0;i<3;i++) { //treat less than 3 items in this loop } for(int

在我的android应用程序中,如果有10个项目,那么选择3个项目时,我会检查当前范围。例如,如果当前范围为3到5(即第3、第4和第5项),则我希望以不同的方式处理少于3项(即0到2项)的项目,并以不同的方式处理大于3项的项目,以不同的方式处理范围项目(即第3、第4和第5项)。所以我可以用两种方法来做:

第一种方法)使用多个for循环,如:

for(int i=0;i<3;i++)
{
  //treat less than 3 items in this loop
} 

for(int i=3;i<5;i++)
{
  //treat range items i.e. 3rd, 4th and 5th items in this loop
} 

for(int i=4;i<9;i++)
{
  //treat greater than 3 items in this loop
} 
for(int i=0;i<9;i++)
{
  if(i<3)
  {
    //treat less than 3 items
  }
  else if(i>3)
  {
    //treat greater than 3 items 
  }
  else
  {
    //treat range items i.e. 3rd, 4th and 5th items 
  }
} 
for(int i=0;i问问自己两个选项需要执行多少条“指令”。在第一个示例中,您有3个循环,但每个循环对数据的“1/3”起作用。选项两个循环一次,但“all”元素,对于“all”元素,它运行那些if/else级联

因此,从技术上讲,第一种解决方案导致更少的指令

但真正的答案是:除非我们谈论的是数千个元素的处理,否则这真的不重要。Java性能不是来自聪明的源代码。它来自简单的代码,即即时编译器可以转化为最佳的机器代码…如果需要的话

除此之外:只有在遇到实际问题时,才应该担心性能。当然,避免在源代码中做完全愚蠢的事情,但请记住:即使在移动设备中,现代CPU也非常强大。这里或那里的一些CPU几乎没有效果。一次日志记录调用、DB fetch或对远程服务器的调用可能会带来1000个CPU与“3个循环”和“1个循环3个如果”相比,“惩罚”要多几倍

因此,真正的答案是:尝试编写易于阅读和理解的代码。在您的示例中:在第一个示例中,您可以将每个for循环放在其自己的方法中。这将使JIT能够进行方法体的内联等操作


你看,当你编写简单的代码时,你使JIT更容易完成它的工作。而且:如果你后来发现“性能很差”,那么易读的代码也更容易更改。

这不是效率的问题

单独的循环可确保处理所有索引:

int i = 0;
for (; i < 3; i++) {
    // treat less than 3 items in this loop
} 
for (; i < 6; i++) {
    // treat range items i.e. 3rd, 4th and 5th items in this loop
} 
for (; i < 9; i++) {
    // treat greater than 3 items in this loop
}
inti=0;
对于(;i<3;i++){
//在此循环中处理少于3项
} 
对于(;i<6;i++){
//处理范围项目,即此循环中的第三、第四和第五个项目
} 
对于(;i<9;i++){
//在此循环中处理3个以上的项目
}
或:

inti=0;
而(i<3){
//在此循环中处理少于3项
++一,;
} 
而(i<6){
//处理范围项目,即此循环中的第三、第四和第五个项目
++一,;
} 
而(i<9){
//在此循环中处理3个以上的项目
++一,;
}
注意
<5
更改为
<6



更好一点,因为条件的语义/含义更能自我解释。因此更具可读性。

性能差异几乎肯定是无关的。选择一个你认为最容易阅读的。我不确定是否确实存在差异(编译器可能也会优化代码)这样我就不麻烦了。很可能你不会遇到任何性能问题,如果你是,那么问题很可能在其他地方,你需要正确地分析你的应用程序。为什么你在这里担心性能呢?我认为第一个更快,这样你就不会不必要地检查哪个范围是正确的
i
@Thomas一般来说,java编译器在源代码方面的优化几乎为零。几乎所有的“魔法”都是在运行时通过JIT实现的(我承认:我不知道android的“jvm”在这里有多“聪明”)。请勾选编辑1。在这种情况下,您对使用正确的方法有何想法?那么,您的意思是3个单独的循环方法比在一个for循环中包含各种条件的if语句更好吗?是的,因为条件的语义和含义更能自我解释。感谢您的帮助和时间。因此,结论:第一种方法更好呃?因为它比较容易阅读,而且说明也比较少?是的,我同意。请检查编辑1。对于在这种情况下使用第一种方法(包含RecyclerView作为选项卡管理器)您有什么想法。请避免回来并改变问题的整个上下文。我对android编程没有那么深入。…但是我真的不明白那会有什么不同。好的。谢谢你的帮助和时间。
int i = 0;
while (i < 3) {
    // treat less than 3 items in this loop
    ++i;
} 
while (i < 6) {
    // treat range items i.e. 3rd, 4th and 5th items in this loop
    ++i;
} 
while (i < 9) {
    // treat greater than 3 items in this loop
    ++i;
}