2013年12月16日 星期一

[JAVA] container (轉)

在程式運作中,有時候會需要有地方可以暫時儲存產生出來的物件,我們稱之為 Container(容器)。

而根據目的的不同,在 container 的選擇上也有所不同,例如:

  • List:循序索引的串列結構
  • Set:不允許相同物件存在的集合結構
  • Map:使用 Key-Value(鍵-值) 方式儲存的結構
Collection

在 Java SE 中,Collection 包含了 List 以及 Set。

首先先認識一下 List ,其為 java.util.Collection interface 的 sub interface,而 Collection interface 則是擴充了 Iterable interface,因此其關係如下:

Iterable --> Colllection --> List
而在 J2 SE 5.0 之後,由於增加了 Generic 的功能,因此許多這一類的 Class 都使用 Generic 的功能重新改寫了,因此在查詢 API 時常常會發現 Generic 的使用。

而 List 的特性在於:每個 List 中的元素都是循序加入的,並可透過 index 來存取元素。

然而,List 可使用 Array(java.util.ArrayList) 或是 Linked List(java.util.LinkedList) 來進行實作。而每一種不同的資料結構,適用的情況也不同:

  • ArrayList:處理循序加入以及存取元素方面,效率較佳
  • Linked List:處理經常變動元素排列順序時,效率較佳
接著以下針對由 List 所衍生出來的 container 進行說明:

ArrayList
使用 Array 結構實作 List,而其特性為 index 的應用,因此對於快速取得隨機 object 上效率叫好,但在新增或刪除 object 上,速度就會比 Linked List 慢上許多。

沒有留言: