1. 程式人生 > >泛型,JDK5新特性,List集合子實現類,Map集合,Set/TreeSet集合,asList

泛型,JDK5新特性,List集合子實現類,Map集合,Set/TreeSet集合,asList

JDK5新特性 List集合子實現類 Map集合 Set/TreeSet集合 asList

一、泛型(JDK5以後新特性)

1、概述:泛型直接規定集合的存儲類型,將明確的集合類型的工作推遲到了創建對象或者調用方法的時候,屬於一種參數化類型,可作參數傳遞。
2、優點
(1)將運行時期異常提前到了編譯時期;
(2)優化了設計,解決了×××警告線問題;
(3)避免了強制類型轉換, ,解決了向下類型轉換出現的問題ClassCastException;
(4)泛型的引出可以提供程序的安全性。
3、泛型定義在類上
(1)格式:public class 類名<T>{……}
(2)實例:
實體類:
技術分享圖片
測試類:
技術分享圖片

4、泛型定義在方法上
(1)格式:public<T> 返回值類型 方法名<T t>{……}

(2)實例:
實體類:
技術分享圖片
測試類:
技術分享圖片

(3)註意:在方法上定義泛型時,若未指明類型,在主函數中可賦多種類型值。

5、泛型定義在接口上
(1)格式:
A、接口
Public Interface 接口名<T>{……}
B、子實現類:
情況一:泛型類型已確定
Public class 子實現類 implements 接口名<T>{……}
情況二:泛型類型不確定
Public class 子實現類<T> implements 接口名<T>{……}
(2)實例:
接口:
技術分享圖片
子實現類:
技術分享圖片
測試類:
技術分享圖片

6、泛型添加位置
(1)類/接口:定義類/接口時添加。
(2)集合:創建對象和獲取叠代器時添加(創建集合對象,在泛型明確的情況下,前後必須保持一致)。

7、泛型通配符(高級)
(1)<?>:代表任意類型Object類型,或者任意Java類 。
(2)<? extends E>:向下限定,E的子類或者E本身。
(3)<? super E>:向上限定,E本身或者其父類。
(4)實例:
實體類:
技術分享圖片
測試類:
技術分享圖片

二、JDK5以後的新特性

1、可變參數
(1)當一個方法的參數個數不確定的時候,使用可變參數。
(2)格式:修飾符 返回值類型 方法名(數據類型...變量名){......}
(3)註意:a、變量名看作數組;b、數據類型…(數據類型後必須是三個“.”)。
(4)實例:
技術分享圖片

2、增強for循環(實際開發中常用)
(1)作用:替代叠代器,在遍歷集合或者遍歷數組時常用增強for循環。

(2)格式:for(數據類型 變量名 : 數組或者集合對象名){
輸出變量
}
(3)弊端:如果集合的對象是null,再次對集合操作,會出現異常。
解決:對集合進行非空判斷。
例如:遍歷存儲String類型數據的集合list:
if(list !=null) {
for(String s:list) {
System.out.println(s);
}
}
3、靜態導入
(1)特點:
A、前提:導入的方法必須為靜態。
B、導入到一個方法的級別。
(2)格式:import static 包名.類名.方法名;
(3)方式:
A、導包,調用方法時直接寫方法名。
B、不導包,調用方法時直接加前綴。

三、ArrayList(List集合的子實現類)

1、概述:ArrayList是List接口中常用的子實現類。
2、底層:數組實現,查詢快,增刪慢。線程不安全,不同步,執行效率高。
3、遍歷功能
(1)Iterator iterator()方式。
(2)size()和get(int index)結合,普通for循環。
(3)增強for循環(實際開發中常用)。
(4)ListIterator listIterator()方式。

四、Vector(List集合的子實現類)

1、底層:是一種可增長對象數組實現,查詢快,增刪慢,線程安全,同步,執行效率高。
2、特有功能
(1)public void addElement(Object obj)添加元素。
(2)public Enumeration elements()返回此向量的枚舉,相當於public Iterator iterator()。
(3)boolean hasMoreElements()判斷是否有可遍歷的元素。
(4)Object nextElement()遍歷下一個元素。

五、LinkedList(List集合的子實現類)

1、底層:鏈表實現,查詢慢,增刪快。線程不安全的,不同步,執行效率高。
2、特有功能
(1)添加功能
A、addFirst(Object e):將指定的元素插入到列表的開頭
B、addLast(object e):將指定的元素添加到列表末尾
(2)獲取功能
A、getFirst():獲取列表第一個元素
B、getLast():獲取列表第二個元素
(3)刪除功能
A、public Object removeFirst()移除並返回此列表的第一個元素。
B、public Object removeLast()移除並返回此列表的最後一個元素。
3、實例:
技術分享圖片

六、Set集合

1、Set集合和List集合的區別
(1)Set集合:不允許元素重,且元素唯一,不能保證叠代的順序恒久不變(底層哈希表和hascode),無序(存儲和取出不一致),元素可以為null。
(2)List集合:允許元素重復,有序(存儲和取出一致)。
2、Set集合創建對象(用子實現類HashSet):Set<數據類型> set = new HashSet<數據類型>();
3、Set集合元素唯一性和無序性原因
(1)唯一性:HashSet的add()方法底層依賴於雙列集合HashMap,它依賴於兩個方法,HashCode()方法和equals()方法。
(2)無序性:底層的哈希表和hashcode()方法。
4、自定義類中用Set集合
自定義類中用Set集合,無法保證元素唯一性。若要在自定義類中保證元素唯一性,需在自定義類中重寫HashCode()方法和equals()方法。

七、LinkedHashSet集合

1、概述:具有可預知叠代順序,元素唯一、有序,底層由鏈接列表與哈希表組成。
2、LinkedHashSet集合創建對象:
LinkedHashSet<數據類型> 對象名=new LinkedHashSet<數據類型>。
3、元素唯一有序原因
(1)保證元素唯一性:由哈希表決定(HashCode()方法和equals()方法)。
(2)保證元素有序性:由鏈表決定。

八、TreeSet集合

1、概述:TreeSet集合元素唯一,有序,默認情況下是通過自然順序對集合中的元素排序。
2、TreeSet集合創建對象:TreeSet<數據類型> 對象名=new TreeSet<數據類型>();(默認)。
3、TreeSet集合添加元素存儲方式
TreeSet集合依賴於TreeMap結構實現,紅黑樹結構(自平衡的二叉樹結構)。
(1)將存儲的第一個節點作為根節點;
(2)後面的每一個元素添加進來時,均與已存儲的根節點作比較:
A、大於根節點,作為右孩子;
B、小於根節點,作為左孩子;
C、如果已經存在,忽略該元素,不存儲。
上述方式保證了元素唯一有序。
4、取出元素:底層進行前序遍歷或中序遍歷或後序遍歷。
5、TreeSet集合構造方法不同,使用的排序也不同
(1)無參構造:使用自然排序。自定義類需要實現Comparable接口,並需要在自定義類中重寫該接口中的compareTo()方法。創建對象:TreeSet<類名> 對象名=new TreeSet<類名>();(默認情況)。
(2)有參構造:使用比較器排序。兩種實現方式:
A、自定義類需要實現Comparator接口,並需要在自定義類中重寫該接口中的compare()方法。創建對象:TreeSet<類名> 對象名=new TreeSet<類名>(new Comparator());
B、在主函數中用接口匿名內部類的方式實現,直接在主函數中實現Comparator接口,重寫compare方法。創建對象:TreeSet<類名> 對象名=new TreeSet<類名>(new Comparator<類名>());
6、自定義類中用TreeSet集合實現自然排序:
自定義類需要實現Comparable接口,並在自定義類中重寫該接口中的compareTo()方法,重寫該方法時,需要在方法中寫排序條件。
自定義類格式:
public class 類名 implements Comparable<類名> {
……
public 返回值類型 comparaTo(類名 對象名){
排序條件;
}
}

7、自定義類中用TreeSet集合實現比較器排序:
(1)自定義類需要實現Comparator接口,並需要在自定義類中重寫該接口中的compare()方法。創建對象:TreeSet<類名> 對象名=new TreeSet<類名>(new MyComparator());
(2)在主函數中用接口匿名內部類的方式實現,直接在主函數中實現Comparator接口,重寫compare方法。創建對象:TreeSet<類名> 對象名=new TreeSet<類名>(new Comparator<類名>());

九、Map集合

1、概述:鍵值的映射關系的一種集合(接口)。將鍵映射到值的對象。一個映射不能包含重復的鍵;每個鍵最多只能映射到一個值。 Map<K,V>,在Map集合中,只針對鍵有效,與值無關。
2、Map接口的子實現類:HashMap,TreeMap。
3、Map集合和Collection的區別(面試題)?
(1)Map集合:一種鍵和值的映射關系(雙列集合)。
(2)Collection集合::單列集合,只能存儲一種類型的元素。
(3)間接關系:HashSet依賴於Map接口的子實現類HashMap,TreeSet依賴於Map接口的子實現類TreeMap。
4、Map集合創建對象:Map<鍵類型,值類型> 對象名=new HashMap<鍵類型,值類型>。
5、Map接口功能
(1)添加功能V put(K key,V value) :將指定的值和鍵關聯起來。如果當前的鍵是一次存儲,則返回值null,如果不是第一次存儲,返回值是第一次對應的值,當前的值會把之前的鍵對應的值替換掉。
(2)獲取功能
A、Set<Map.Entry<K,V>> entrySet()與和Map集合的遍歷有關系,鍵值對對象。
B、Set<K> keySet()獲取映射關系中所有的鍵的集合。
C、int size()返回此映射中的鍵-值映射關系數。
(3)刪除功能
A、void clear()刪除所有映射關系(暴力刪除)。
B、Vremove(Object key)如果存在一個鍵的映射關系,將其從此映射中移除,返回的是該鍵對應的值。
(4)判斷功能
A、boolean containsKey(Object key)判斷此映射中是否包含指定鍵的映射關系,若包含則返回 true。
B、boolean containsValue(Object value)判斷映射關系中是否包含指定的值,若包含則返回 true。
C、boolean isEmpty()判斷映射關系是否為空。
(5)獲取功能
A、Set<K> keySet()獲取映射關系中所有的鍵的集合。
B、V get(Object key)通過鍵找值。

十、數組轉換為固定大小的集合

1、方法:public static <T> List<T> asList(T... a) :將數組轉換成固定大小的集合。
註意:用該將數組轉換成固定大小的集合時,不能在該集合中添加元素,或者刪除元素,否則會出現不支持該操作異常:java.lang.UnsupportedOperationException。

泛型,JDK5新特性,List集合子實現類,Map集合,Set/TreeSet集合,asList