假设我有两个数组arrayOne
和arrayTwo
其中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
}
}
答案 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)
因此,假设你的“做某事”在两种情况下都需要相似的次数,两种选择都应该花费相同的时间。