JAVA中靜態數組與動態數組

來源:互聯網
上載者:User
JAVA中靜態數組與動態數組前面我們學習的數組都是靜態數組,其實在很多的時候,靜態數組根本不能滿足我們編程的實際需要,比方說我需要在程式運行過程中動態向數組中添加資料,這時我們的靜態數組大小是固定的,顯然就不能添加資料,要動態添加資料必須要用到動態數組,動態數組中的各個元素類型也是一致的,不過這種類型已經是用一個非常大的類型來攬括—Object類型。

Object類是JAVA.LANG包中的頂層超類。所有的類型都可以與Object類型相容,所以我們可以將任何Object類型添加至屬於Object類型的數組中,能添加Object類型的的集合有ArrayList、Vector及LinkedList,它們對資料的存放形式仿造於數組,屬於集合類,下面是他們的特點:

特點一、容量擴充性

從內部實現機制來講ArrayList和Vector都是使用Objec的數組形式來儲存的。當你向這兩種類型中增加元素的時候,如果元素的數目超出了內部數組目前的長度它們都需要擴充內部數組的長度,Vector預設情況下自動成長原來一倍的數組長度,ArrayList是原來的50%,所以最後你獲得的這個集合所佔的空間總是比你實際需要的要大。所以如果你要在集合中儲存大量的資料那麼使用Vector有一些優勢,因為你可以通過設定集合的初始化大小來避免不必要的資源開銷。

特點二、同步性

ArrayList,LinkedList是不同步的,而Vestor是的。所以如果要求安全執行緒的話,可以使用ArrayList或LinkedList,可以節省為同步而耗費開銷。但在多線程的情況下,有時候就不得不使用Vector了。當然,也可以通過一些辦法封裝ArrayList,LinkedList,使他們也達到同步,但效率可能會有所降低。

特點三、資料操作效率

ArrayList和Vector中,從指定的位置(用index)檢索一個對象,或在集合的末尾插入、刪除一個對象的時間是一樣的,可表示為O(1)。但是,如果在集合的其他位置增加或移除元素那麼花費的時間會呈線形增長:O(n-i),其中n代表集合中元素的個數,i代表元素增加或移除元素的索引位置。為什麼會這樣呢?以為在進行上述操作的時候集合中第i和第i個元素之後的所有元素都要執行(n-i)個對象的位移操作。
LinkedList中,在插入、刪除集合中任何位置的元素所花費的時間都是一樣的—O(1),但它在索引一個元素的時候比較慢,為O(i),其中i是索引的位置。

所以,如果只是尋找特定位置的元素或只在集合的末端增加、移除元素,那麼使用Vector或ArrayList都可以。如果是對其它指定位置的插入、刪除操作,最好選擇LinkedList

ArrayList 和Vector是採用數組方式儲存資料,此數組元素數大於實際儲存的資料以便增加和插入元素,都允許直接序號索引元素,但是插入資料要設計到數組元素移動等記憶體操作,所以索引資料快插入資料慢,Vector由於使用了synchronized方法(安全執行緒)所以效能上比ArrayList要差,LinkedList使用雙向鏈表實現儲存,按序號索引資料需要進行向前或向後遍曆,但是插入資料時只需要記錄本項的前後項即可,所以插入數度較快。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.