天天看點

java中集合和泛型(基礎)

  集合和泛型總結

    讀此文章大概需要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)如果包含指定元素,傳回true
indexOf(Object obj)傳回指定元素第一次出現的位置,如果不包含此元素,則傳回-1
  其他方法:
equlas(Object obj)判斷與指定的集合是否相等
IsEmpty() 判斷集合是否為空,如果為空,傳回true
Iterator()傳回一個疊代器。(可以進行周遊和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集合轉成數組: 隻暴露對元素的‘改’,‘查’操作。而且使長度保持不變,增加了元素的安全性。