集合
Collection
Collection接口表示一個容器,容器中只能存儲引用數(shù)據(jù)類型,建議存同一類型的引用類型,方便后續(xù)遍歷等操作。
容器中的元素可以是有序的、可重復(fù)的,稱為List接口
也可能是無序的、唯一的,稱為Set接口。
List接口
List 接口中的元素時有序的、可重復(fù)的。List接口中的元素通過索引(index)來確定元素的順序。
ArrayList
ArrayList是List接口的實現(xiàn)類,底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,實現(xiàn)大小可變的數(shù)組。線程不安全 jdk1.2
ArrayList底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,默認數(shù)組容量為10,如果超過容量會自動拓容,拓容:新容量=舊容量+舊容量/2
Vector
Vector 是List接口的實現(xiàn)類,底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,是大小可變的數(shù)組。線程安全 jdk1.0
Vector底層數(shù)據(jù)結(jié)構(gòu)是數(shù)組,默認數(shù)組大小是10,如果超過容量會自動拓容,拓容:新容量=舊容量+增長因子,增長因子可設(shè)定
LinkedList
LinkedList是List接口的實現(xiàn)類,底層數(shù)據(jù)結(jié)構(gòu)是鏈表。線程不安全?jdk1.2
Iterator和ListIterator
Iterator在迭代過程中不允許向集合中添加元素
ListIterator允許程序員按任一方向遍歷列表、迭代期間修改列表,并獲得迭代器在列表中的當(dāng)前位置
泛型(generic)
泛型就是將類型參數(shù)化
表示聲明了一個列表list,列表的元素是E類型
????????ArrayList<E>? list
聲明了一個列表list,列表的元素只能是String類型。
????????ArrayList<String> list = new ArrayList<String>();
泛型在編譯器起作用,運行時jvm察覺不到泛型的存在。運行時已經(jīng)被擦除了
泛型類
public class 類名<T>{
}
泛型方法? ?一定程度上優(yōu)化了方法重載
public <T> void 類名(T a) {
??? System.out.println(a);
}
泛型接口
如果接口中的方法的參數(shù)(形參、返回值)不確定時,可以考慮使用泛型接口
public interface 類名<T>{
??? public? void showInfo(T t);
}
在實現(xiàn)類中確定泛型接口的類型,若是無法確定泛型接口的類型則繼續(xù)使用泛型
public class 實現(xiàn)類名<T> implements xxx<T>{
???? @Override
???? public void showInfo(T t) {
???? }
}
泛型的上限和下限
泛型的上限ArrayList(? extends xxx) list 聲明了一個容器,容器中的元素類型一定要繼承于xxx,我們稱這種形式叫做泛型的上限。
泛型的下限ArrayList(? super xxx) list 聲明了一個容器,容器中的元素類型一定要是xxx的父類,我們稱這個形式為泛型的下限。
Set接口
Set接口表示一個唯一、無序的容器(和添加順序無關(guān))
HashSet
HashSet是Set接口的實現(xiàn)類,底層數(shù)據(jù)結(jié)構(gòu)是哈希表。線程不安全,不同步 jdk1.2

如果向HashSet中添加元素時,一定要實現(xiàn)hashCode方法和equals方法。
優(yōu)點:添加、刪除、查詢效率高;缺點:無序
LinkedHashSet
LinkedHashSet是Set接口的實現(xiàn)類,底層數(shù)據(jù)結(jié)構(gòu)哈希表+鏈表,哈希表用于散列元素;鏈表用于維持添加順序。線程不安全,不同步 jdk1.4
添加元素,需要實現(xiàn)hashCode和equals方法。
TreeSet
TreeSet 是Set接口的實現(xiàn)類,底層數(shù)據(jù)結(jié)構(gòu)是二叉樹。線程不安全,不同步 jdk1.2
TreeSet 存儲的數(shù)據(jù)按照一定的規(guī)則存儲。存儲規(guī)則讓數(shù)據(jù)表現(xiàn)出自然順序。本質(zhì)上是無序的
添加自定義元素一定要提供比較策略,比較策略分兩種:內(nèi)部比較器和外部比較器
Map接口
Map接口稱為鍵值對集合或者映射集合,其中的元素(entry)是以鍵值對(key-value)的形式存在。
Map 容器接口中提供了增、刪、改、查的方式對集合進行操作。
Map接口中都是通過key來操作鍵值對,一般key是已知。通過key獲取value。
HashMap
HashMap 是Map的實現(xiàn)類,key以HashSet存儲。線程不安全,不同步 jdk1.2
存儲元素時,key一定要實現(xiàn)hashCode和equals,一般建議使用String作為Map接口的key
LinkedHashMap
LinkedHashMap是Map接口的實現(xiàn)類,key以LinkedHashSet存儲。線程不安全,不同步 jdk1.4
哈希表散列key,鏈表維持key的添加順序。
TreeMap
TreeMap是Map的實現(xiàn)類,key以TreeSet存儲。線程不安全,不同步 jdk1.2
