1. 程式人生 > >資料庫連線池中比較一下ArrayList和LinkedList

資料庫連線池中比較一下ArrayList和LinkedList

在我們專案中的jdbc 連結中,我們一般會用到資料庫連線池的這麼東東,list

// 資料庫連線池
private LinkedList<Connection> datasource = new LinkedList<Connection>();

why we must use this list LinkedList ,個人認為下面第三條很好的解釋了這個問題 。

1.ArrayList是基於陣列,LinkedList基於連結串列實現。
2.對於隨機訪問get和set,ArrayList覺得優於LinkedList,因為LinkedList要移動指標。
3.對於新增和刪除操作add和remove,LinedList比較佔優勢,因為ArrayList要移動資料。


4.查詢操作indexOf,lastIndexOf,contains等,兩者差不多。
這裡只是理論上分析,事實上也不一定,比如ArrayList在末尾插入和刪除資料就不設計到資料移動,不過還是
有這麼個建議:隨機訪問比較多的話一定要用ArrayList而不是LinkedList,如果需要頻繁的插入和刪除應該
考慮用LinkedList來提高效能。

如果z 引用一個當前內容是“start”的字串緩衝區物件,則此方法呼叫 z.append("le") 會使字串緩衝區包含“startle”,而 z.insert(4, "le") 將更改字串緩衝區,使之包含“starlet”。  

每個字串緩衝區都有一定的容量。只要字串緩衝區所包含的字元序列的長度沒有超出此容量,就無需分配新的內部緩衝區陣列。如果內部緩衝區溢位,則此容量自動增大。從 JDK 5 開始,為該類補充了一個單個執行緒使用的等價類,即 StringBuilder。與該類相比,通常應該優先使用 StringBuilder 類,因為它支援所有相同的操作,但由於它不執行同步,所以速度更快。 例如:如果 sb 引用 StringBuilder 的一個例項,則 sb.append(x) 和 sb.insert(sb.length(), x) 具有相同的效果。

Java.lang.StringBuilder一個可變的字元序列。此類提供一個與 StringBuffer 相容的 API,但不保證同步。該類被設計用作 StringBuffer 的一個簡易替換,用在字串緩衝區被單個執行緒使用的時候(這種情況很普遍)。如果可能,建議優先採用該類,因為在大多數實現中,它比 StringBuffer 要快。在 StringBuilder 上的主要操作是 append 和 insert 方法,可過載這些方法,以接受任意型別的資料。每個方法都能有效地將給定的資料轉換成字串,然後將該字串的字元追加或插入到字串生成器中。 append 方法始終將這些字元新增到生成器的末端;而 insert 方法則在指定的點新增字元。

String / StringBuffer /StringBuilder,在字串連線操作上效能依次加強,我曾經做過一個實驗,連續進行10000次的字串操作,三者速度上的差距是驚人的。在確切知道是不變字串的情況下,還是用String最好,因為Java語言中String採用了享元模式(Flyweight),在JVM中只存在一份相同的String 。在確定迴圈次數時,儘量使用for迴圈,在迴圈巢狀中儘量將大迴圈放到外層,小迴圈放到內層,這點與VB等語言恰好相反,經過程式碼
測試
的,不過還不知道原因。總之,在VB等微軟系列語言中用小套大會快很多,而在JAVA中用大套小會快很多!當然這是指兩者能互相替換的時候,比如二維陣列遍覓等!

如果字串特別長,採用charAt逐一獲取特定位置的字元是非常耗時的。因為每次獲取制定索引位置的字元都要引起新的檢索過程,更好的辦法是將字串通過呼叫toCharArray方法轉換成字元陣列,然後通過陣列索引值獲得指定位置的字元。

對於boolean值,避免不必要的等式判斷將一個boolean值與一個true比較是一個恆等操作(直接返回該boolean變數的值). 移走對於boolean的不必要操作至少會帶來2個好處: 1)程式碼執行的更快 (生成的位元組碼少了5個位元組); 2)程式碼也會更加乾淨。

關於使用SESSION問題上,儘量不要將大物件放到HttpSession或其他須序列化的物件中,並注意及時清空Session。