天天看點

黑馬程式員-集合概念與工具類Collections

---------------------- ASP.Net+Android+IOS開發、.Net教育訓練、期待與您交流! ----------------------

數組和集合類同是容器,有何不同?

數組中可以存儲基本資料類型,也可以存儲對象,

集合隻能存儲對象

數組長度是固定的

集合長度是可變的

有個疑問:

在java中,所有元素都是對象,對于基本資料類型,實際上也是一個對象,因為java對基本資料類型有自動裝箱和拆箱的功能,是以,數組和集合的差別應該在存儲的内容上沒有差別才對?是否可以說,集合也可以存儲基本資料類型?

解答:JDK1.5之後,集合中可以添加基本資料類型,就是自動裝箱拆箱的緣故.是以如果要往集合裡裝基本資料類型的時候,特别是涉及到泛型的寫法

這樣的泛型寫法是錯誤的:

TreeMap<char,int>treemap = new TreeMap<char,int>();

應該這樣寫

TreeMap<character,Integer>treemap=newTreeMap

< character,Integer >();

集合類的特點

集合隻用于存儲對象(不能存儲基本資料類型),集合長度是可變的,集合可以存儲不同類型的對象。

Collection接口有兩個子接口:

List:可存放重複元素,元素存取是有序的。(有序可重複)

Set:不可以存放重複元素,元素存取是無序的(無序不可重複)

疊代取出方法Iterator()是Collection裡面的方法,所有,Collection的子類都具有Iterator()

一道面試題:collection和collections有什麼差別?

Collection是一個接口,也可以說是一個架構

Collections專門用于對集合進行操作的工具類,

幾個主要的功能方法:

排序:

public static <T extends Comparable<?super T>> void sort(List<T> list):根據元素的自然順序對指定清單按升序進行排序

public static <T> voidsort(List<T> list,Comparator<? super T> c):根據指定比較器産生的順序對指定清單進行排序

翻轉:

static voidreverse(List<?> list)

:反轉指定清單中元素的順序

Ps:

注意,該方法是沒有傳回值類型的,是直接修改了元素在集合中的位置

publicstatic <T> Comparator<T> reverseOrder()

:傳回一個比較器,它強行逆轉實作了 Comparable 接口的對象 collection 的自然順序

publicstatic <T> Comparator<T> reverseOrder (Comparator<T> cmp)

:傳回一個比較器,它強行逆轉指定比較器的順序。如果指定比較器為 null,則此方法等同于 reverseOrder()

Ps:

注意,該方法是傳入一個比較器對象,然後傳回一個比較器對象,改變了傳入比較器内部的比較方式

加鎖:

重點介紹一下加鎖方法

synchronizedList(List<T> list)

synchronizedMap(Map<K,V> m)

synchronizedSet(Set<T> s)

傳入未加鎖的集合,傳回一個加鎖的集合

将數組轉變成集合,不能使用集合的增删方法,因為數組的長度是固定的,如果使用了增删操作,那麼會抛異常

例:

List list = Array.asList(arr);

List.add(“01”);

這個編譯會不通過

一個注意的地方:

如果數組中的元素都是對象,那麼轉成集合時,數組中的元素就會直接轉成集合中的元素

如果數組中的元素都是基本資料類型,那麼會将數組名作為集合中的元素存在

int[] arr={4,3,4,2,5,6}

錯誤的寫法List<Integer>Arrays.asList(arr);

正确的寫法:List<int[]>Arrays.asList(arr);

對于Integer[] arr={4,3,4,2,5,6};

正确的寫法List<Integer>Arrays.asList(arr);

錯誤的寫法:正确的寫法:List< Integer []>Arrays.asList(arr);

為什麼要把集合轉成數組?

為了限制對元素的操作,因為數組的長度是固定的,限制增删操作

---------------------- ASP.Net+Android+IOS開發、.Net教育訓練、期待與您交流! ----------------------

詳細請檢視:http://edu.csdn.net 

繼續閱讀