我正在寫一個算法,從裏面到if條件從一個結束到一個整數數組做一個大循環。在條件錯誤的第一次,循環可以終止。Java For循環vs While循環,奇怪的行爲和時間表現
因此,使用for循環,如果條件爲false,它將繼續使用簡單變量更改進行迭代。 使用while參數作爲條件,while循環將在條件爲false時停止,並應保存一些迭代。
但是,while循環仍然比for循環慢一點!
但是,如果我把一個int值作爲計數器,並對迭代進行計數,For循環如預期的那樣執行更多的迭代。 但是這一次,使用計數器的mofified For方法的執行時間將比使用計數器的while方法慢得多!
任何解釋?
這裏用的代碼循環:
for (int i = pairs.length - 1; i >= 0; i -= 2) {
//cpt++;
u = pairs[i];
v = pairs[i - 1];
duv = bfsResult.distanceMatrix.getDistance(u, v);
if (duv > delta) {
execute();
}
}
時間執行:6473
時間執行與抗衡:8299個
迭代計數:2584401
在這裏與while循環的代碼:
int i = pairs.length - 1;
u = pairs[i];
v = pairs[i - 1];
duv = bfsResult.distanceMatrix.getDistance(u, v);
while (duv > delta) {
//cpt++;
execute();
u = pairs[i -= 2];
v = pairs[i - 1];
duv = bfsResult.distanceMatrix.getDistance(u, v);
}
執行時間:6632
時間執行與抗衡:7163
迭代計算:9793
時間是毫秒,我有不同的大小intances多次反覆實驗,這些措施幾乎保持不變。 execute()方法更新增量值。方法getDistance()只是一個矩陣int [] []訪問。
感謝您的任何幫助。
你可以用兩個循環完成同樣的事情。例如::你可以在duv <= delta'時打開for循環。 –
你用什麼單位進行時間測量?毫秒?如果是這樣,我認爲你正在尋找一個微基準問題。 –
我同意,我的問題是爲什麼時間幾乎與while循環相同,因爲它正在做更多的迭代。爲什麼當我把一個簡單的櫃檯變得更「正常」? –