近期在做影象處理的時候。發現某一段**很的慢。慢得讓人無法接受。基本的**是順序訪問乙個linkedlist的元素,效果是隨著index的變大,速度越來越慢,list的元素個數在百萬以上。找到原因,分享出來。也希望大家不要跳入同乙個陷阱。
還是那一句話。可執行的**和高質量的**之間還是有比較遠的距離。
**裡面增加了一些列印時間相關的**,主要是為了直觀的顯示執行的耗時。
public static void main(string args)
long starttime = system.currenttimemillis();
for (int i = 0; i < size; i++) }}
控制台輸出例如以下:
錯誤的**就是list.get(i)
,linkedlist的底層是乙個鍊錶,隨機訪問i的時候。鍊錶僅僅能從頭往後數,第i個才返回。所以時間隨著i的變大時間會越來越長。
順序訪問,linkedlist絕對不要用get方法,即使linkedlist的元素個數僅僅有非常少的幾個。
養成好習慣,免得犯錯。
for each
for (string element : list)
iterator
iteratoriter = list.iterator();
while (iter.hasnext())
直接換為arraylist
public static void main(string args)
long starttime = system.currenttimemillis();
for (int i = 0; i < size; i++) }}
arraylist的控制台輸出例如以下:
以下比較一下linkedlist和arraylist的效率。
arraylist測試**例如以下:
public static void main(string args)
system.out.println("add " + size + " elements spend: "
+ (system.currenttimemillis() - starttime));
// query
starttime = system.currenttimemillis();
string median = list.get(size / 2);
system.out.println("query median spend: "
+ (system.currenttimemillis() - starttime));
// delete
starttime = system.currenttimemillis();
list.remove(median);
system.out.println("delete median spend: "
+ (system.currenttimemillis() - starttime));
}
linkedlist測試**例如以下:
public static void main(string args)
system.out.println("add " + size + " elements spend: "
+ (system.currenttimemillis() - starttime));
// query
starttime = system.currenttimemillis();
string median = list.get(size / 2);
system.out.println("query median spend: "
+ (system.currenttimemillis() - starttime));
// delete
starttime = system.currenttimemillis();
list.remove(median);
system.out.println("delete median spend: "
+ (system.currenttimemillis() - starttime));
}
盡量使用arraylist,arraylist滿足不了需求的時候再用linkedlist。依據linkedlist的特點,在以下幾種情況下才使用linkedlist。 一種EXC BAD ACCESS錯誤的原因分析
最近在學ios開發的時候發現乙個奇怪的錯誤,在介面上放乙個文字框,其他什麼都不改就執行,然後在文字框中隨便輸入字元,輸入幾個就會報exc bad access錯誤,查了一下資料發現這種錯誤是由於記憶體訪問或釋放錯誤引起,但就放乙個控制項什麼都沒做怎麼也報這種錯呢,難道xcode模板 就有問題,加入調...
dao注入失敗 null 的一種錯誤
初接觸springboot,沒有使用配置檔案來配置bean的掃瞄規則,出現了 autowired service可以自動注入,但是 autowired dao不能注入,導致dao報空指標。controller controller public class blacklistcontroller s...
Hibernate 列名無效 錯誤的一種原因
產生報錯的場景 1 hibernate使用純sql方式查詢 2 查詢出來的結果拼裝成乙個vo物件。產生報錯的原因 1 vo物件中為了拼裝結果,有get 方法,用於拼裝和組合結果 2 select出來的列中,沒有get 對應的屬性。如上,hibernate就會報 列名無效 的錯誤。解決方法,selec...