LinkedList的一種錯誤使用方法

2021-09-07 10:43:35 字數 2508 閱讀 4624

近期在做影象處理的時候。發現某一段**很的慢。慢得讓人無法接受。基本的**是順序訪問乙個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...