### 集合類基礎接口
| 接口 | 描述 |
| :---: | :--- |
| Collection | 運行操作一組對象,集合層次結構頂部 |
| Queue | 擴展Collection,只能從列表頂部刪除元素 |
| Deque | 擴展Queue以處理雙端隊列 |
| List | 擴展Collection以處理序列 |
| Set | 集合中的元素必須唯一 |
| SortedSet | 已排序的集合 |
| NavigableSet | 擴展SortedSet以基于最接近匹配原則檢索元素 |
### 
### JAVA集合實現類
* ArrayList
* LinkedList
* ArrayDeque
* HashSet
* TreeSet
* EnumSet
* LinkedHashSet
* PriorityQueue
### Collection重點關注API
* Collection的創建:關注實現類的構造器
* boolean add\(E e\);此方法的實現決定了此方法的性能
* remove\(Object o\);
* get\(index\)
* Iterator<E> iterator\(\);
* contains\(Object o\);
### 【知識點】
* Set存儲的是不重復的對象,依據hashCode和equals進行判斷,所以Set存儲的對象必須重寫這兩個方法;
* String重寫了hashCode和equals方法,所以我們可以非常愉快地使用String對象作為key來使用;
* ArrayList的subList結果不可強轉成ArrayList,否則會拋出ClassCastException異常,即java.util.RandomAccessSubList can not be cast to java.util.ArrayList;subList返回的是ArrayList的內部類SubList,并不是ArrayList而是ArrayList的一個視圖,對于SubList子列表的所有操作最終會反映到原列表上;
* 在subList場景中,高度注意對原集合元素的增加或刪除,均會導致子列表的遍歷增加、刪除產生ConcurrentModificationException異常;
* 使用集合轉數組的方法,必須使用集合的toArray\(T\[\]array\),傳入一樣的數組,大小就是list.size\(\);直接使用toArray無參方法存在問題,此方法返回值只能是Object\[\]類,若強轉其它類型數組將出現ClassCastException錯誤;
* 使用工具類Arrays.asList\(\)把數組轉換成集合時,不能使用其修改集合相關的方法,它的add/remove/clear方法會拋出UnsupportedOperationException異常;
### 總結
### List和Set的區別
1. List和Set之間很重要的一個區別是是否允許重復元素的存在,在List中允許插入重復的元素,而在Set中不允許重復元素存在,即使插入相同元素也會進行替換;
2. List和Set之間另外一個很重要的區別與元素先后存放順序有關。List是有序集合,而Set是無序集合。List會保留元素插入時的順序,也就是說之前插入的元素的索引要比之后插入的元素的索引要小。而Set不會保留插入時的順序;【PS:ArrayList中使用對象數組來存儲對象,在每次插入新的對象時會插入到size大小處;至于HashSet,前面說到是通過HashMap來實現的,存入的對象作為HashMap的key,如果key相同會替換value。當然,SortedSet(繼承了Set接口)能夠以指定的排序方式來保存元素】
3. List可以通過下標來訪問,而Set不能
【知識點】
* java5.0增加了2種新的容器類型:Queue和BlockingQueue
* java6增加了兩種容器類型Deque和BlockingDeque,分別對Queue和BlockingQueue進行了擴展
- java演變
- JDK各個版本的新特性
- JDK1.5新特性
- JDK1.6新特性
- JDK1.7新特性
- JDK1.8新特性
- JAVA基礎
- 面向對象特性
- 多態
- 方法重載
- 方法重寫
- class
- 常量
- 訪問修飾符
- 類加載路徑
- java-equals
- 局部類
- java-hashCode
- Java類初始化順序
- java-clone方法
- JAVA對象實例化的方法
- 基礎部分
- JAVA基礎特性
- JAVA關鍵字
- javabean
- static
- 日期相關
- final
- interface
- 函數式接口
- JAVA異常
- 異常屏蔽
- try-with-resource資源泄露
- JAVA引用
- WeakReference
- SoftReference
- PhantomReference
- 位運算符
- try-with-resource語法糖
- JDK冷知識
- JAVA包裝類
- JAVA基本類型與包裝類
- java.lang.Boolean
- java.lang.Integer
- java.lang.Byte
- java.lang.Short
- java.lang.Long
- java.lang.Float
- java.lang.Double
- java.lang.Character
- 日期相關
- TemporalAdjusters
- String
- 字符串常量池
- String拼接
- String編譯期優化
- StringBuilder&StringBuffer
- intern
- 注解
- java標準注解
- 內置注解
- 元注解
- 自定義注解
- 注解處理器
- JVM注解
- Java8 Annotation新特性
- 反射-Reflective
- Reflection
- Class
- Constructor
- Method
- javabean-property
- MethodHandles
- 泛型
- 類型擦除
- bridge-method
- Accessor&Mutator方法
- enum
- JAVA數組
- finalize方法
- JAR文件
- JAVA高級編程
- CORBA
- JMX
- SPI
- Java SPI使用約定
- ServiceLoader
- 實際應用
- IO
- 工具類
- JDK常用工具類
- Objects
- System
- Optional
- Throwable
- Collections
- Array
- Arrays
- System
- Unsafe
- Number
- ClassLoader
- Runtime
- Object
- Comparator
- VarHandle
- 數據結構
- 棧-Stack
- 隊列(Queue)
- Deque
- PriorityQueue
- BlockingQueue
- SynchronousQueue
- ArrayBlockingQueue
- LinkedBlockingQueue
- PriorityBlockingQueue
- ConcurrentLinkedQueue
- 列表
- 迭代器
- KV鍵值對數據類型
- HashMap
- TreeMap
- Hash沖突
- ConcurrentHashMap
- JDK1.7 ConcurrentHashMap結構
- jdk7&jdk8區別
- 集合
- Vector
- Stack
- HashSet
- TreeSet
- ArrayList
- LinkedList
- ArrayList && LinkedList相互轉換
- 線程安全的集合類
- 集合類遍歷性能
- 并發容器
- CopyOnWriteArrayList
- ConcurrentHashMap
- 同步容器
- BitMap
- BloomFilter
- SkipList
- 設計模式
- 設計模式六大原則
- 單例模式
- 代理模式
- 靜態代理
- 動態代理
- JDK動態代理
- cglib動態代理
- spring aop
- 策略模式
- SpringAOP策略模式的運用
- 生產者消費者模式
- 迭代器模式
- 函數式編程
- 方法引用
- 性能問題
- Lambda
- Lambda類型檢查
- Stream
- findFirst和findAny
- reduce
- 原始類型流特化
- 無限流
- 收集器
- 并行流
- AOP
- 靜態織入
- aspect
- aspect的定義
- AspectJ與SpringAOP
- 動態織入
- 靜態代理
- 動態代理
- JDK動態代理
- CGLib動態代理
- Spring AOP
- SpringAOP五種通知類型
- @Before
- @AfterReturning
- @AfterThrowing
- @After
- @Around
- Aspect優先級
- SpringAOP切點表達式
- within
- execution
- 嵌套調用
- 系統優化與重構
- 重疊構造器模式
- 工具類構造器優化
- 常見面試題
- new Object()到底占用幾個字節
- 訪問修飾符
- cloneable接口實現原理
- 異常分類以及處理機制
- wait和sleep的區別
- 數組在內存中如何分配
- 類加載為什么要使用雙親委派模式,有沒有什么場景是打破了這個模式
- 類的實例化順序
- 附錄
- JAVA術語
- FAQ
- 墨菲定律
- 康威定律
- 軟件設計原則
- 阿姆達爾定律
- 字節碼工具
- OSGI