1. 程式人生 > >java學習中對泛型、Map、Collectiongs的一些理解

java學習中對泛型、Map、Collectiongs的一些理解

泛型:

1、泛型定義,一種安全機制。表明引數或者介面或者類的資料型別,般是 < > 表示 泛型,是在1.5之後才產生的,一般JDK“進化” 會更安全,更高效,更完整。 在1.5之前,沒有泛型都是用利用多型的思想強制轉化成某個型別再得到想要的值, 使用泛型過後, 可以在編譯的環節直接知道資料的問題所在: ArrayList<Person> list = new ArrayList<Person>(); 泛型在什麼時候使用? 當不確定某個引數的型別的時候可用泛型。 2、泛型的類 泛型類在多個方法前面間實施型別約束。 泛型一旦作用於類,那麼該類的所有函式都可以使用該泛型類 例項化該類的時候需要加入泛型確保安全。 3、泛型的函式 1、通常情況下引數內部不知道型別的時候使用泛型。 public <QQ> void run(QQ q) 4、 靜態泛型函式:
1、靜態函式不可以訪問類上定義的泛型。 2、如果靜態方法操作的應用資料型別不確定, 那麼在函式上確定好泛型 5、 泛型介面: * interface Run<TT>{ public void run(TT a); public void runrun(TT b); } 需要注意的是:一旦使用名字,那麼在實現的時候需要確定是何種型別。 來自官方普通的四種泛型 <K> 鍵 <V> 值 <E> 異常類 <T> 普通泛型 特殊情況: 1、泛型的引數如果不考慮繼承的話,會報錯的,除非用? 泛型萬用字元有三種: 1、無限定萬用字元 , <?> 2、上邊界限定萬用字元 ,<? extends Number> ArrayList<? extends 型別1> x = new ArrayList<型別2>(); 型別1指定了一個數據型別, 那麼型別2只能是型別1或者型別1的子類 3、下邊界限定萬用字元 ,<? super Number>
ArrayList<? super 型別1> x = new ArrayList<型別2>(); 型別1指定了一個數據型別, 那麼型別2就只能是型別1或者型別1的父類 限定萬用字元總是包括自己!

Map

Map 集合:<鍵值對> 就像是一本書的目錄和內容,通常是通過目錄去找內容。 Map 無序的: 1、增 put(key, value) putAll(Map<? extends K,? extends V> m) 2、刪 clear remove(Object key) 3、改 put(K key, V value) 4、查 keySet entrySet get size HashMap與TreeMap 1、HashTable 同步的,Hash表的資料結構形式,速度慢 2、HashMap 不同步的,Hash表的資料結構形式,速度快 3、TreeMap 不同步的,Tree的資料結構形式,速度慢 獲取鍵的形式,遍歷: 1、keySet 2、entrySet HashMAP 和 HashSet 區分與聯絡: 1、都是通過雜湊表做為資料結構儲存資料。 2、集合內部的資料都不重複。 3、HashSet 其實就是一種HashMap,只不過不存在相關的key,也就是取值的時候只能用迭代。 4、HashMap 沒有迭代。需要轉換成Set型別。

Collections

包裝器與眾多集合類一樣實現了Collection介面。 包裝器裡的方法都是由靜態方法組成,可以直接通過類呼叫 包裝器裡的方法:fill、reverse、max、min、replaceAll、shuffle、sort\ fill: 使用指定元素替換指定列表中的所有元素。 reverse: 反轉指定列表中元素的順序。 max: 取列表中最大的元素,按自然排序。 min:取集合中最小的元素,按自然排序。 replaceAll: 使用另一個值替換列表中出現的所有某一指定值。 shuffle:打亂列表 sort: 自然排序,可重寫比較器 高階for迴圈:在1.5之後有foreach for( xx : yy ) 高階for侷限性:必須要有遍歷的目標 可變引數 JDK 1.5 特性 其實一種陣列引數的簡寫方式,代替例項化的過程,也稱之為隱私封裝陣列.。 可變引數原則:   1、如果需要多個引數傳入,請把其他的引數放在可變引數之前。 2、可變引數只有... ,比如 int... 表示傳入的int的陣列。 3、一個函式只能擁有一個可變引數。