跳至內容

Java集合框架

出自Taiwan Tongues 台語維基
這是此頁批准,以及是最近的修訂。

Java 集合框架Java collections framework)是一个包含一系列實作會當重複使用集合的資料結構的類別和介面集合。雖然講「框架」,用的方式煞像函式庫。集合框架提供了定義各式各樣集合的介面佮實作上述集合的類別。

佮陣列的無仝處

集合佮陣列佇兩者保持物件參考核可予人看做是一个團體頂懸有功能上的相𫝛處。集合佮陣列其中一點仔無仝就是,集合佇宣告的時陣無需要指定固定的容量。集合會使佇新增抑是徙掉內容時自動地增加抑是縮減其容量。 另外咧,集合無法度收納基本資料型態,親像整數(int)、 發整數(long)抑是雙精度浮點數(double)。 取代之的是,集合會當收納頂懸述基本資料型態的包裹類別(Integer、Long、Double)。

歷史

集合介面佇咧 JDK 一鋪二先行版本時納入,並且包括少數簡單的資料結構類別,但彼當陣並無包括完整的集合框殼。 原本咧 Java 典型集中物件的方法就是使用陣列(array)、 向量(Vector)抑是雜鬥表(Hashtable)類別來處理。但是欲講的類別並無簡單欲擴展,而且並無一个標準的介面。 彼當陣若想欲用會當重合資料結構,嘛是有數種第三方的框殼會當供選擇。上闊為使用的譬如講道格 ・ 利亞的 _ 集合包 _(Collections package)的 _ 集合包 _

集合框架主要是由約冊亞 ・ 布洛克設計而且開發,並於 JDK 一爿二中匯入。伊重新使用袂少來自道格 ・ 利亞的集合包的概念佮類別,並佇咧最後使用後者過時陣。 道格 ・ 利亞後來投入發展並行性 Java 包,並佇咧其使用矣佮集合框架有關的類別。而後來並行性的工具佇咧 JDK 五曉空以 JSR 一百六十六匯入。

架構

佇咧 Java,強欲全部的集合攏衍生自 java . util . Collection。集合介面定義矣所有集合的基本部件。介面中定義矣加入(add)和徙掉(remove)兩種方法來增加抑是徙掉該集合內的元素。一个必要的方法比如講轉規陣列(toArray), 用佇咧共該集合的所有轉換做基本陣列。最後咧,一个叫做 _ 有含 _(contains)的方法阮檢查某的元素敢有佇這个集合內。集合這个介面是 java . lang . Iterable 的子介面,故此集合會當用佇咧 For-each 函式的查詢目標。(Iterable 介面包含方法疊代器(iterator)來予 For-each 函式使用)。 所有的集合攏有一个疊代器來遍詢集合內的所有的元素。另外咧,集合嘛是一个 Java 的泛型。逐何集合攏須要寫做會當接受任何類別。比如講:集合矣 < 字捾 >會當用來囥字捾,而且佇咧其中所有的元素提出來攏予人看做字串,而無需要另外轉型。用的時陣,角括號內底添入這个集合應該是囥啥物類別。

三種集合

集合會當分做三種:有序列表(ordered lists)、對映表(maps)和(sets)。 有序列表容許程式設計師照序地加入元素,閣以仝款的順序取回元素,譬如講等候列表。佇咧有序列表介面下跤有兩个介面,分別為列表(Lists)和在列(Queue)。 對映表使用索引來參考物件閣取回其值。佇咧對映表介面下跤有一个介面對映表(Map)。 集是一種會當供遍巡的無序集合,毋過中間無允准重複的物件存在。佇咧其中有一个介面(Set)。

列表介面

列表佇咧集合框架內底藉著 java . util . List 介面實作,其實欲列表定義做一種閣較靈活的陣列。元素有特定的順序嘛,而且容可仝款的元素佇咧。元素會當予人囥佇咧特定的位置,嘛會當佇列表內底去予人搜揣。以下兩種舉例為實作了列表介面的具體物件 :

  • java . util . ArrayList : 其實欲列表實作為一種陣列。操作其方法去添入類別時,該種類別會共元素佇咧某一个所屬陣列當中。
  • java . util . LinkedList : 這个類別共元素包裝做鋩角,啊若逐个節點包含講頭一節點佮後一節點的指標。這款列表藉著讀的指標來佇咧節點中巡查閣操作元素。元素會當藉著操作指標來掛上佮脫離節點,來簡單事實現新增抑是刪除。

疊類別

疊起來會當 java . util . Stack 建立。其實提供方法來推入(push)抑是彈出(pop)當中的元素。疊起來會後進先出的原則來回傳元素。意即,最後推入的元素會上先彈出。java . util . Stack 是 Java 所提供的疊標準實作。其實是延伸 java . util . Vector 並且加入五種新的操作來予向量會當予人看做堆疊。除了提供了推入佮彈出方法外,閣提供(Seek)方法來檢查上頂頭的元素、檢查疊起來敢有空白的方法、閣走揣並檢查某元素離上頂頭有偌遠的方法。疊去予建立的時陣,當中無含任何的元素。

在列類別

java . util . Queue 定義了在列資料結構,也就是將元素以其加入的順序來排序的集合。新加入的元素會囥佇咧對列的上尾仔,提出物件的時陣會先對上頂懸開始提出。這實現矣先進先出的模式。佇這介面下跤有 java . util . LinkedList , java . util . ArrayDeque , 和 java . util . PriorityQueue。

集介面

Java 的 java . util . Set 定義矣集。集袂當包括任何重複的元素,另外集也無順序。嘛因為按呢,佇咧集內的元素無法度提來引存取。佇咧集底下實際去矣雜鬥集(java . util . HashSet)、連結雜鬥集(java . util . LinkedHashSet)和樹狀集(java . util . TreeSet)。 雜鬥使用雜鬥對映表(java . util . HashMap)來儲存元素佮其雜鬥陣來防止重複。連結雜鬥集藉著建立雙向連結列表來按照逐个元素的加入順序進行聯繫,按呢會當保持這集的順序。樹狀集使用紅烏樹來確保無重複的元素。另外咧,遮的實作容許樹狀集能實作已經排序集(java . util . SortedSet)。 佮一般的集所無仝款的是,已經排序集會藉著元素的比較起來(compareTo)方法、抑是已經排序集建構式內底提供的函式,來對其中元素進行排序。按呢會當輕鬆取得已排序集中間的頭一佮第一尾元素,抑是由某上大佮上細值做區間來取得子集。

已經排放猶閣會當藉著會當𤆬航集(java . util . NavigableSet)介面擴充。會當導航集佮已經排序集足成,猶毋過有額外的新方法,像講塗跤(floor)、天篷(ceiling)、閣較低(lower)和閣較懸(higher)。 遮的方法會當按照某參數來佇導航集走揣符合條件的元素。另外咧,會當𤆬航集嘛提供一个疊代器,通好用佇遍詢其中的元素。

對映表介面

Java 的 java . util . Map 定義矣對映表。對映表是一種以索引佮元素掛鉤的簡單資料結構。若是佇咧對映表內以雜鬥值代表某元素的索引,則這个對映表實質上是一个集。若是以一个遞增號碼來做索引,則實質上做一个列表。佇咧對映表下實作矣雜鬥表(java . util . HashMap)、連結雜鬥表(java . util . LinkedHashMap)、 和樹狀(java . util . TreeMap)。 雜鬥表會儲存索引值的雜鬥值來做為比對並提出這該索引連接的元素之用。連結雜鬥表進一步拓展矣上述架構,伊增加一个雙向連結串列來連結當中的元素,使其實會當儉元素加入的順序。樹狀表使用紅烏樹來比對索引值。

對映表介面借著伊的子介面,已經排序對映表(java . util . SortedMap), 得著進一步的拓展。已經排放對映表會藉索引的比較起來(compareTo)方法、抑是已經排序對影表建構式當中提供的函式,來對其中索引進行排序。按呢會當輕鬆取得已經排序對影表當中的第一佮第六尾索引,或者是由某上大和上細值做區間來取得索引佮值來建立子對映表。

參見

  • 容器

注釋

參考資料

外部連結