所有集合框架都包含接口蚯涮、實現(xiàn)類和算法,算法執(zhí)行一些有用的計算 (如Collections實現(xiàn)了對集合的排序和遍歷)
容器 | 集合 | 數(shù)組 |
---|---|---|
長度 | 可變 | 固定 |
存儲內(nèi)容 | 對象 | 對象树肃、基本數(shù)據(jù)類型 |
存儲數(shù)據(jù)類型 | 不固定 | 固定 |
-
Collection接口:存儲一組重復(fù)赦抖、無序的對象
-
List接口:存儲一組重復(fù)、有序的對象崖咨,重寫equals方法保證唯一性
①ArrayList:動態(tài)數(shù)組,查詢速度快油吭,JDK7中默認容量是10击蹲,擴容到1.5倍
②Vector:類似于ArrayList,擴容到2倍婉宰,但線程安全
Stack:例如遞歸
③LinkedList:底層數(shù)據(jù)結(jié)構(gòu)是雙向鏈表歌豺,增刪速度快LinkedList特有方法 boolean offerFirst() //在列表開頭插入指定元素,優(yōu)先級比addFirst()大 E peekFirst() //獲取但不刪除此列表的第一個元素心包,此列表為空返回null getFirst() //如果列表為空类咧,會拋出異常 E pollFirst() //獲取并刪除此列表的第一個元素 ? 數(shù)組和List間的轉(zhuǎn)換:Arrays.asList(array)、list.toArray()
-
Set接口:存儲一組唯一且無序的對象
①HashSet:基于HashMap ,通過hashCode和equals確保元素唯一性
存儲對象時先比較hashCode痕惋,若哈希表中有對應(yīng)的hash碼才調(diào)用equals方法判斷hash碼相同的對象是否為同一對象(返回false存儲新對象)
②TreeSet:底層數(shù)據(jù)結(jié)構(gòu)是二叉樹(有序的遍歷)
Queue接口
-
-
Map接口:存儲鍵值對(鍵唯一無序)
①HashTable:線程安全且鍵值不能為空区宇,Properties的父類,保留類不建議使用
注:ConcurrentHashMap位于JUC并發(fā)包值戳,線程安全能解決性能低的問題
②HashMap:允許鍵或值為空议谷,默認初始容量16
底層是數(shù)組和單向鏈表,在JDK8中Hash沖突少時使用鏈表存儲相同hash值的數(shù)據(jù)堕虹,多時使用紅黑樹
LinkedHashMap:散列表+雙向鏈表
③TreeMap:底層數(shù)據(jù)結(jié)構(gòu)是二叉樹
HashMap特有方法 Object put(Object key,Object value) //放入集合 boolean containsKey(Object key) Set keySet() //獲取所有key的集合 Collection values() //獲取所有value的集合 Set<Map.Entry<K,V>> entrySet() //獲得鍵值對的集合
-
Iterator接口:迭代器柿隙,即集合元素的取出方式
List有兩種迭代器,Set只有一種迭代器鲫凶,Map沒有迭代器(轉(zhuǎn)換為Set集合)
增強for的底層原理是迭代器,只有列表迭代器能在遍歷時增刪改查
迭代器是單列集合的衩辟,只有重寫Iterable接口的iterator方法才能迭代遍歷