熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

Java靜態與動態數組特點分析

2013-11-15 12:05:21  來源: JSP教程 

  平常我們接觸到的大多都是靜態數組其實在很多的時候靜態數組根本不能滿足我們編程的實際需要比方說我需要在程序運行過程中動態的向數組中添加數據這時我們的靜態數組大小是固定的顯然就不能添加數據要動態添加數據必須要用到動態數組動態數組中的各個元素類型也是一致的不過這種類型已經是用一個非常大的類型來攬括Object類型Object類是JAVALANG包中的頂層超類所有的類型都可以與Object類型兼容所以我們可以將任何Object類型添加至屬於Object類型的數組中能添加Object類型的的集合有ArrayListVector及LinkedList它們對數據的存放形式仿造於數組屬於集合類下面是他們的特點

  同步性

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

  數據操作效率

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

  容量擴充性

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

  所以如果只是查找特定位置的元素或只在集合的末端增加移除元素那麼使用Vector或ArrayList都可以如果是對其它指定位置的插入刪除操作最好選擇 LinkedListArrayList 和Vector是采用數組方式存儲數據此數組元素數大於實際存儲的數據以便增加和插入元素都允許直接序號索引元素但是插入數據要設計到數組元素移動等內存操作所以索引數據快插入數據慢Vector由於使用了synchronized方法(線程安全)所以性能上比ArrayList要差LinkedList使用雙向鏈表實現存儲按序號索引數據需要進行向前或向後遍歷但是插入數據時只需要記錄本項的前後項即可所以插入數度較快


From:http://tw.wingwit.com/Article/program/Java/JSP/201311/20263.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.