arraylist內部用動態陣列來實現;linkedlist內部採用雙向鍊錶實現;vector內部用動態陣列實現(執行緒安全)。
arraylist和vector內部使用物件陣列來儲存資料,當陣列滿時,vector擴容時會提高1倍,arraylist則是增加50%。
arraylist在執行插入元素是超過當前陣列預定義的最大值時,陣列需要擴容,擴容過程需要呼叫底層system.arraycopy()方法進行大量的陣列複製操作;在刪除元素時並不會減少陣列的容量(如果需要縮小陣列容量,可以呼叫trimtosize()方法);在查詢元素時要遍歷陣列,對於非null的元素採取equals的方式尋找。
linkedlist在插入元素時,須建立乙個新的entry物件,並更新相應元素的前後元素的引用;在查詢元素時,需遍歷鍊錶;在刪除元素時,要遍歷鍊錶,找到要刪除的元素,然後從鍊錶上將此元素刪除即可。
vector與arraylist僅在插入元素時容量擴充機制不一致。對於vector,預設建立乙個大小為10的object陣列,並將capacityincrement設定為0;當插入元素陣列大小不夠時,如果capacityincrement大於0,則將object陣列的大小擴大為現有size+capacityincrement;如果capacityincrement<=0,則將object陣列的大小擴大為現有大小的2倍。
arraylist對元素的增加和刪除都會引起陣列的記憶體分配空間動態發生變化。因此,對其進行插入和刪除速度較慢,但檢索速度很快。
linkedlist由於基於鍊錶方式存放資料,增加和刪除元素的速度較快,但是檢索速度較慢。
arraylist、linkedlist為非執行緒安全;vector是基於synchronized實現的執行緒安全的arraylist。
需要注意的是:單執行緒應盡量使用arraylist,vector因為同步會有效能損耗;即使在多執行緒環境下,我們可以利用collections這個類中為我們提供的synchronizedlist(list list)方法返回乙個執行緒安全的同步列表物件。
list list = collections.synchronizedlist(new arraylist());
list******list = list.of("hello","world");
Java核心技術 筆記6 7
1 repeat 10 0 system.out.println hello world 要接受此lambda表示式,需要提供函式式介面 public static void repeat int n runnable action action.run 會執行lambda表示式主體 2.不止乙個函...
Java核心技術 筆記6 8
1.區域性內部類中,若只建立乙個類的物件 只用了一次 就不用命名了,即 匿名內部類 public void start int interval,boolean beep timer t new timer interval listener t.start 0 形式即 new supertype ...
Java核心技術 筆記7 1
1.異常物件都是派生於 throwable 類的乙個例項 非受查異常 error層描述內部錯誤 和 資源耗盡錯誤 由程式導致的異常屬於runtimeexception 受查異常 程式本身沒有問題,執行時產生的錯誤 如io,取決於環境而非 屬於其他異常 2.用throws宣告異常 不宣告error異常...