集合和泛型總結
讀此文章大概需要15分鐘
一 Collection:更新版的數組,集合的長度是可變的,而且存儲的是對象,數組存儲的是基本資料類型。
出現版本: java1.2
Collection
|--List
|--ArraySet|--LinkSet|--Vextor
|-- Set
|--HashSet
|--TreeSet
1.建立: Collection coll = new Collection();
2.方法:
增:
add(Object obj) 增加一個元素
add(Collection c) 增加一個相應集合裡的元素
删:
clear() 删除所有元素
remove(Object obj) 删除指定元素,并傳回其值。
改:
查:
get(int index)得到指定位置的元素Contains(Object obj)如果包含指定元素,傳回trueindexOf(Object obj)傳回指定元素第一次出現的位置,如果不包含此元素,則傳回-1其他方法:equlas(Object obj)判斷與指定的集合是否相等IsEmpty() 判斷集合是否為空,如果為空,傳回trueIterator()傳回一個疊代器。(可以進行周遊和remove操作,不允許增改查操作)listIterator()傳回一個清單疊代器(可以進行周遊和增删改查等操作)。
3.List: 有序清單,以存儲元素的順序排列。允許出現重複的元素,而且可以存儲null值,常見的有ArrayList,LinkList,Vector
|--ArrayList: 使用數組順序存儲元素,不是線程同步,效率高一點。
|--inkedList: 使用連結清單存儲元素;
|--Vector: 使用數組順序存儲元素,是線程同步的
4.Set :無序清單,不允許出現重複元素,最多隻能包含一個null常見的有HashSet和 TreeSet
|--HashSet:
保證元素的唯一性用兩個方法:hashCode()和equals(Object obj,如果存儲自定義的對象類型,需要複寫這些方法。保證元素唯一性時,先比較hashCode(),如果hashCode()相同,再比較equals方法是否相等。
|--TreeSet:有“順序”的無序Set
1.按元素自身的比較方式:可以對Set中的元素進行排序,排序的依據是:接口Comparable中的CompareTo。 需要在對象類型中實作Comparable中的CompareTo方法;2.建立一個構造器:可以對Set中的元素進行排序, 實作接口Comparator的子類,然後重寫compare方法。 使用方法: 在TreeSet執行個體化時,指定構造器,New Treeset( new Comparator() )
當兩種方法都存在時,以構造器Comparator為排序方式。
二 泛型:
1.出現原因:
1).将運作時的ClassCastException轉換到編譯時期,友善解決。增加安全性;2)泛型類的定義: 當類中操作的引用的資料類型不确定的時候。3)方法上定義泛型: public <T>void xxx(T t){}更友善調用方法,不局限于一種資料類型;4).靜态方法不可以使用類上面的泛型。 但可以把泛型定義在方法上。
2.出現版本:java1.5
3.方法:
增:
put(K key,V value)增加 鍵 和此相關聯的值putAll(Map<? extendsK,? extendsV> m)增加指定Map中的所有鍵和相關聯的值
删:
remove(Object key)删除指定的鍵 并傳回其相關聯的值
clear()删除所有鍵和值
改:
查:
get(Object key) 得到與指定鍵相關聯的值containsKey(Object key)判斷是否包含指定的鍵containsValue(Object value)判斷是否包含指定的值
4. 應用:
1).方法中 使用xxx<?>來接受各種明确的類型。public void p(xxx<?>, x){}。2).泛型限定:xxx<? extends yyy>可以接受yyy或yyy的子類;xxx<? super zzz>可以接受做zzz或zzz的父類;
5.Map<K, V>
|-- HashTabel 哈希表的資料結構的,不可存入null鍵和null值,同步的|--HashMap 哈希表的資料結構,可以存入null鍵和null值。不同步的 |--TreeMap 二叉樹的資料結構,不同步的,鍵值排序.
Map集合取出原理:
1.先将鍵的值用KeySet方法裝入Set集合, 然後用用疊代器,将value的值取出。2.Map中entrySet集合:傳回Set<Map.Entry<K,V>>其中Map.Entry<K,V>有許多直接取出鍵和值的方法。 Entry 是Map中的一個内部靜态接口,是一種映射 關系。TreeMap中comparaTo(K k) 和TreeSet相同;
三 Collections和Arrays功能類:
1.Colllections.sort() 排序類:排序List。2.Collections.max()3.Collections.binarySearch();4.Collections.reverseOrder傳回一個逆向排序的比較器。 重寫的方法:reverserOrder(Comparator <T>);5.Collections.synchronized Xxxx 傳回同步的相應集合對象。6.Collections.shuffle()洗牌操作。
※7.數組中Arrays.asList()方法中, 如果數組是基本類型,那麼就是把數組作為一個元素封裝在List集合中; 如果數組是對象,那就是把數組中的元素直接 轉成集合中的元素。8.Array.sort(); 排序9.Array.binarySearch() 在一個有序的數組中使用二分法查找指定元素10.Array.equlas(); 判斷兩個數組是否相等11.Arrau.fill() 用指定的值替換數組中指定範圍的元素。12.數組轉成集合作用: 可以對元素進行更多的操作,如: get,indexOf……但不可對集合進行‘增’的操作,集合長度也是固定的。13集合轉成數組: 隻暴露對元素的‘改’,‘查’操作。而且使長度保持不變,增加了元素的安全性。