1、集合
定義
集合是一種工具類排监,就像容器狰右,能夠存儲任意數(shù)量的具有共同屬性的對象。作用
1社露、在類的內部挟阻,對數(shù)據(jù)進行組織。集合就是一種容器峭弟,當一個類擁有相同類型的多個對象時附鸽,可以考慮用集合來承載他們。
2瞒瘸、集合適用于簡單而快速的搜索大數(shù)量的條目坷备。
3、有的集合接口情臭,提供了一系列排列有序的元素省撑,可以在序列中間快速的插入或者刪除指定元素。
4俯在、有的集合接口竟秫,提供了映射關系,可以通過關鍵字key去快速的查找對應的唯一對象跷乐,而這個關鍵字可以是任意類型肥败。集合與數(shù)組的區(qū)別
1、數(shù)組的長度是固定的,不容易動態(tài)擴展馒稍;集合的長度是可變的皿哨,能夠動態(tài)擴展。
2纽谒、數(shù)組只能通過下標來訪問元素证膨,并且類型固定;而有的集合可以通過任意類型查找所映射的具體對象鼓黔。
3央勒、數(shù)組元素既可以是基本類型的值,也可以是對象请祖。集合里只能保存對象(實際上只是保存對象的引用變量)订歪,基本數(shù)據(jù)類型的變量要轉換成對應的包裝類才能放入集合類中。-
Collection體系結構
在Java語言中肆捕,有兩種類型的集合接口:Collection和Map,前者表示的是對象的容器集合盖高,后者表示的是鍵值對的容器集合慎陵。
Collection
Collection是一個接口,它主要有三個接口來繼承它:List(序列)喻奥、Queue(隊列)和Set(集)席纽。List中最主要的實現(xiàn)類是ArrayList(數(shù)組序列);Queue中最主要的實現(xiàn)類是LinkedList(鏈表)撞蚕,它同樣實現(xiàn)了List接口润梯;Set中最主要的實現(xiàn)類是HashSet(哈希集)。Map
Map是一個接口甥厦,它有一個重要的實現(xiàn)類HashMap(哈希表)-
特點
- List和Queue是排列有序纺铭,可重復的
- Set是無序且不可重復的,在Set接口中重復添加某個對象刀疙,只保留第一次添加的對象(引用)
- Map中一對鍵值對:<Key, Value> = Entry舶赔,Key值不可重復,Key與Value的映射關系為一對一或一對多
2谦秧、泛型
-
定義
一種不確定的類型竟纳,可以在編譯期間確定的數(shù)據(jù)類型。 - 語法
//用E來代替實際類型疚鲤,在編譯時確定
public class ArrayList<E> {
//code
}
-
泛型類與泛型方法:
- 泛型類:帶有泛型參數(shù)的類就是泛型類锥累。對此總結成一句話:泛型類型在邏輯上可以看成是多個不同的類型,實際上都是相同的基本類型 比如上面的ArrayList就是泛型類集歇。
- 泛型方法:帶有泛型參數(shù)或者返回值的方法就叫做泛型方法桶略。方法定義時的返回類型為泛型。
-
優(yōu)點:
- 在編譯期間有更強的類型檢查: 泛型的主要目標是提高 Java 程序的類型安全。通過知道使用泛型定義的變量的類型限制删性,編譯器可以在一個高得多的程度上驗證類型假設亏娜。
- 避免強制類型轉換: 泛型的一個附帶好處是,消除源代碼中的許多強制類型轉換蹬挺。這使得代碼更加可讀维贺,并且減少了出錯機會
- 潛在的性能收益: 泛型為較大的優(yōu)化帶來可能。在泛型的初始實現(xiàn)中巴帮,編譯器將強制類型轉換(沒有泛型的話溯泣,程序員會指定這些強制類型轉換)插入生成的字節(jié)碼中。但是更多類型信息可用于編譯器這一事實榕茧,為未來版本的 JVM 的優(yōu)化帶來可能垃沦。由于泛型的實現(xiàn)方式,支持泛型(幾乎)不需要 JVM 或類文件更改用押。所有工作都在編譯器中完成肢簿,編譯器生成類似于沒有泛型(和強制類型轉換)時所寫的代碼,只是更能確保類型安全而已蜻拨。
-
泛型的一些規(guī)則和限制:
- 泛型的類型參數(shù)只能是引用類型(包括自定義類)池充,不能是基本類型。
- 同一種泛型可以對應多個版本(因為參數(shù)類型是不確定的)缎讼,不同版本的泛型類實例是不兼容的收夸。
- 泛型的類型參數(shù)可以有多個
- 泛型集合中,只能添加泛型規(guī)定的類及其子類
通配符(?)
-
定義:
通配符表示一種未知類型,并且對這種未知類型存在約束關系血崭。
通常有類:
- ? extends T(上邊界通配符upper bounded wildcard) 對應協(xié)變關系卧惜,表示 ? 是繼承自 T的任意子類型.也表示一種約束關系,只能提供數(shù)據(jù)夹纫,不能接收數(shù)據(jù)咽瓷。 ? 的默認實現(xiàn)是 ? extends Object, 表示 ? 是繼承自Object的任意類型。
- ? super T(下邊界通配符lower bounded wildcard) 對應逆變關系捷凄,表示 ? 是 T的任意父類型忱详。也表示一種約束關系,只能接收數(shù)據(jù)跺涤,不能提供數(shù)據(jù)(或者用object來接受)
- 通配符也包括自己匈睁。
舉個例子: 假設有類A, B, C, D; 類D繼承自C, 類C繼承自類B桶错, 類B繼承自類A航唆。
ArrayList<? extends A> upperBoundedList = new ArrayList<B>();
upperBoundedList = new ArrayList<C>();
upperBoundedList.add(new C());// error, can not add data.
ArrayList<? super B> upperBoundedList = new ArrayList<A>();
upperBoundedList.add(new C());
upperBoundedList.add(new D());
upperBoundedList.add(new B());