---------------------- 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