博客已遷移到CSDN《https://blog.csdn.net/qq_33375499》
集合:用於存儲對象的容器。集合中可以存儲任意類型的對象,長度可變。
集合和數組的比較
- 集合和數組都是存儲對象的容器,不同的是,數組可以存儲基本數據類型(int、short、long、char、Boolean、double、float、byte),集合只能存儲任意類型的對象。
- 數組長度是固定的,集合的長度是可變的(根據加載因子和擴容增量來完成擴容)。
數組操作復雜,在java中可用方法少,集合操作簡單,有很多操作方法。
對於集合,頂層都實現了Iterable接口,表明集合都是可迭代的,可以視同iterable()方法獲取集合對於的迭代器,也可以使用增強的for循環進行迭代。
1、Collection:collection為所以集合的定級接口,繼承了Iterable類,表明所有集合類都是可迭代的。
2、List: 實現了Collection接口,存儲的數據是有序的、可重復的,可通過索引進行元素訪問。
3、ArrayList:底層實現為數組,線程不安全,查找效率高,增刪效率低。
4、Vector:由下圖可知vector和ArrayList實現原理相同,但是vector是線程安全的(synchronized),效率略低於ArrayList。
5、Stack:繼承Vector,是一個先進后出的棧。
6、LinkedList:底層實現為雙向鏈表,進行元素的增刪效率高,查詢效率低。
7、Queue:隊列,先進先出(FIFO)
8、Set:存儲的元素是無序的、唯一的。在程序運行中,如果使用add添加一個已經存在的元素,將返回false。
9、HashSet:底層實現為哈希表(鏈表+數組),線程不安全,查找效率高,增刪效率低,通過元素的hashCode和equels方法保證了元素的唯一性。
上圖為HashSet底層實現模式哈希表(數組+鏈表),當一條鏈上元素超過8個以上后,會自動轉換為紅黑樹來存儲元素,提高查詢效率。
11、TreeSet:底層實現為二叉樹,線程不安全,可對元素進行自動排序,保證元素唯一性的方式是compareTo方法返回0。
12、LinkedHashSet:底層實現為鏈表和哈希表,線程不安全,存儲的元素時有序的、唯一的,通過元素的hashCode和equels方法保證了元素的唯一性。
Arrays:類Arrays為集合的工具類,可使用該類的方法對集合進行排序、轉換為list等操作。
Collections:為所有直接或間接實現了Collection接口的集合類的工具類,該類封裝了對集合的各種操作,如排序、反轉、替換等操作。