程序開發(fā)并不是解決了業(yè)務的基本功能就完成了,很多時候程序運行的環(huán)境是有限制的衰倦。比如內存小座云,CPU頻率低疙赠,或者是像手機這樣的設備,能源供應有限朦拖。在這種環(huán)境下圃阳,就需要程序能夠在有限的環(huán)境中提升效率。這就需要使用數據結構和算法璧帝。
但是數據結構與算法即便是學過捍岳,也未必在工作時能夠用好,而且通用性、性能等等也都是問題锣夹。加上學習程序開發(fā)的受眾群體越來越廣页徐,讓程序員全部自己實現數據結構與算法不是一個好的主意。所以現在很多語言為了能夠提升學習效率银萍,降低學習門檻变勇,同時也為了讓程序有更好的執(zhí)行效率和通用性,就自帶了各種實現了數據結構與算法的API集合贴唇。在Java中搀绣,這就是我們現在要學習的「集合框架」
與現在常見到的數據結構類庫一樣,Java也是將集合類庫的接口(interface)與實現(implementation)分離戳气。所以我們的學習方式一般都是先搞明白接口的分類和關系链患,然后根據不同的接口來學習對應的實現類。
使用集合做什么
1. 搬運數據瓶您,集合可以存儲數據锣险,然后通過API調用很方便就可以傳遞大量數據
2. 數據處理,集合中可以直接對數據進行操作览闰,比如統(tǒng)計、去重
3. 排序巷折,可以將數據按照需求進行各種排序压鉴,然后再傳遞給調用者
集合的分類
Java的集合從 Collection 接口和 Map 接口入手
Map 接口和 Collection 沒有交集,它有自己的方式锻拘,只要標準庫后綴不是Map 結尾的油吭,都是直接或者間接實現了Collection接口。
Collection 接口中常見的操作是數據的添加署拟、刪除
1. add / addAll
2. remove / removeAll / removeIf
借助 Iterator 接口婉宰,Collection 還具備了數據的循環(huán)
public interface Collection<E> extends Iterable<E>{
//...
// 對數據循環(huán)
Iterator<E> iterator();
}
通過 Iterable 接口, 標準庫中的集合都可以使用 forEach 循環(huán)推穷。
具體的實現類
| 集合類型 | 描述 |
| --------------- | ---------------------------------------------------- |
| ArrayList | 一種可以動態(tài)增長和縮減的索引序列 |
| LinkedList | 一種可以在任何位置進行高效地插人和刪除操作的有序序列 |
| ArrayDeque | 一種用循環(huán)數組實現的雙端隊列 |
| HashSet | 一種沒有重復元素的無序集合 |
| TreeSet | 一種有序集 |
| EnumSet | 一種包含枚舉類型值的集 |
| LinkedHashSet | 一種可以記住元素插人次序的集 |
| PriorityQueue | 一種允許高效刪除最小元素的集合 |
| HashMap | 一種存儲鍵/ 值關聯的數據結構 |
| TreeMap | 一種鍵值有序排列的映射表 |
| EnumMap | 一種鍵值屬于枚舉類型的映射表 |
| LinkedHashMap | 一種可以記住腱/ 值項添加次序的映射表 |
| WeakHashMap | 一種其值無用武之地后可以被垃圾回收器回收的映射表 |
| IdentityHashMap | 一種用 == 而不是用equals 比較鍵值的映射表 |