嵌套循环的顺序是否对速度有影响

时间:2013-10-21 06:11:50

标签: java arrays performance loops nested-loops

假设我有两个数组arrayOnearrayTwo其中arrayOne.length != arrayTwo.length(假设两个List的类似情况具有不同的size())。以下任何一种方法都能提供速度优势吗?

  • 选项1

    for(int i = 0 ; i < arrayOne.length ; ++i) {
       for(int j = 0 ; j < arrayTwo.length ; ++j) {
        //Do something
       }
    }
    
  • 选项2

    for(int i = 0 ; i < arrayTwo.length ; ++i) {
       for(int j = 0 ; j < arrayOne.length ; ++j) {
        //Do something
       }
    }
    

2 个答案:

答案 0 :(得分:6)

没有一般结果。这取决于您的系统。基准并获得自己的结果。但是利用更多地方的那个通常更快

答案 1 :(得分:0)

假设

arrayOne.length = m
arrayTwo.length = n

计算时间复杂度

for(int i = 0 ; i < arrayOne.length ; ++i) {         // O(m)
  for(int j = 0 ; j < arrayTwo.length ; ++j) {  // O(n)
     //Do something
  }
}

时间复杂度 - O(m)* O(n)= O(mn)

for(int i = 0 ; i < arrayTwo.length ; ++i) {         // O(n)
  for(int j = 0 ; j < arrayOne.length ; ++j) {  // O(m)
     //Do something
  }
}

时间复杂度 - O(n)* O(m)= O(nm)= O(mn)

因此,假设你的“做某事”在两种情况下都需要相似的次数,两种选择都应该花费相同的时间。