Java集合框架概述
概述
什麼是集合?
這Java官方的入門文件是這樣描述集合的:
Collection(有時候也叫container)是一個簡單的物件,它把多個元素組織成一個單元。集合可以用來儲存、檢索、操作、通訊。通常情況下,集合代表了一個自然資料項,比如一組手牌(牌的集合)、郵件資料夾(郵件的集合)、電話目錄(姓名到電話的對映)。如果你使用過Java或者其他語言,你應該很熟悉集合。
什麼是集合框架?
Collections Framework是一個用來表示和操作集合的統一的架構。集合的框架包括了:
- Interfaces:
這些是表示集合的抽象資料型別,介面允許集合完成操作,獨立與其詳細的實現。在面向物件的語言中,介面構成了體系架構;- Implementations:
這些是介面的具體實現。本質上,是一些可複用的資料結構;- Algorithms:
這些方法可以對介面實現的物件進行有用的計算,比如搜尋、排序。這些演算法是具有多型性的:也就是說,同樣的方法可以用在合適的介面的不同實現。本質上,是一些可複用的函式。除了Java的集合框架,還有一些著名的集合框架的例子:比如C++的STL和Smalltalk的集合架構。從歷史上來看,集合框架可能比較複雜,也可能有一些很陡峭的學習曲線。不過我們相信Java的集合框架會突破這樣的傳統,在這章你就可以自己學會。
使用集合框架有什麼好處?
Java的集合框架提供了一下優點:
- 減少程式設計的工作量
:通過提供有用的資料結構和演算法,集合框架能讓你更專注的實現程式的核心功能,而不是去做一個底層的“管道工”。Java框架通過促進無關API的互操作性,使得你不用自己去實現不同API的適配- 提高程式的速度與質量:集合框架提供了一些有用資料結構和演算法的高效能、高質量的實現。每個介面的不同的實現也是可以互換的,所以程式可以通過切換集合來做一些調整。正因為你從實現資料結構的那些苦差事中脫離出來,你才可以有更多的實現去改善你自己程式的效能和質量
- 允許無關APIs的互操作:集合介面是API之間傳遞集合的一個“方言”,比如我的網路管理API有一個節點名的集合,而GUI工具需要一個列標題的集合,即使是分開實現它們,我們的APIs也可以無縫的接合。
- 省力地學習和使用新API:
這是另一個領先的優勢,設計者和實現者沒必要在每次都重新設計API的時候都“推倒重來”地實現集合,而是直接使用標準的集合介面就好了。- 促進軟體的複用:符合標準集合介面的新資料結構本質上是可以複用的。對於操作這些新資料結構演算法也是一樣可以複用的。
因此,後面也便從介面、實現、演算法幾方面結合著程式碼和官方的文件學習總結一下。
介面
在Java中所有的核心集合介面都是generic的
1 2 3 4 5 6 7 8 9 10 |
public interface Collection<E> extends Iterable<E> {} public interface List<E> extends Collection<E> {} public interface Queue<E> extends Collection<E> {} public interface Deque<E> extends Queue<E> {} public interface Set<E> extends Collection<E> {} public interface SortedSet<E> extends Set<E> {} public interface NavigableSet<E> extends SortedSet<E> {} public interface Map<K,V> {} public interface SortedMap<K,V> extends Map<K,V> {} public interface NavigableMap<K,V> extends SortedMap<K,V> {} |
也就是說在宣告一個Collection的時候,應該指定一種型別。官方是這樣解釋原因的:
Specifying the type allows the compiler to verify (at compile-time) that the type of object you put into the collection is correct, thus reducing errors at runtime.
下面就來介紹一下幾種介面:
- Collection: 集合層次中的根。一個集合表示一組物件。有些有序,有些無序。有些重複,有些重複。Collection沒有直接的實現,而只有它的子介面的對應的實現。
- Set:不能包含重複的元素,比如撲克手牌、學生選課計劃、計算機的程序。
- List:有序的集合,也可以包含重複的元素。用於對每個元素精確的控制,比如插入、用index來索引。
- Queue:用於多元素有優先順序的處理,可以用做FIFO
- Deque:用於多元素有優先順序的處理,double ended queue,可以用作FIFO,LIFO
-
Map:用於keys到values的對映,不能包含重複元素
另外還提供了2個帶排序的Set和Map。 - SortedSet:元素升序
- SortedMap:key升序
在1.6版本開始,還有兩種新的介面NavigableSet、NavigableMap。
A SortedMap/SortedSet extended with navigation methods reporting closest matches for given search targets.
提供諸如:
1 2 |
//返回第一個大於e的元素 E higher(E e); |
之類的“導航性質”的便捷操作。
以上便是Java集合框架與介面的相關內容。
原文連結:http://yikun.github.io/2015/03/31/Java%E9%9B%86%E5%90%88%E6%A1%86%E6%9E%B6/