集合
9.集合框架
1)基本概念:用于存放對象的對象(與數(shù)組類似.即集合也是對象.只能存對象)
2)和數(shù)組的差異
A.數(shù)組存放的內(nèi)容由數(shù)組類型指定,集合存放的內(nèi)容為Object類型的引用
B.數(shù)組只有1種數(shù)據(jù)結(jié)構(gòu)(按照索引存儲),集合的數(shù)據(jù)結(jié)構(gòu)分為Set.List和Map三大類.每個(gè)類中還包含若干的小類
C.數(shù)組的容量在創(chuàng)建時(shí)指定,無法在使用中動(dòng)態(tài)擴(kuò)展.所有集合類型的容量都是不定的.根據(jù)需求自動(dòng)擴(kuò)展
3)基本組成
A.接口:用于定義集合的功能框架
B.實(shí)現(xiàn)類:實(shí)現(xiàn)對應(yīng)的接口.實(shí)現(xiàn)集合的具體功能
C.工具:提供對集合操作的輔助功能
4)接口
A.Collection
定義存儲內(nèi)容為單個(gè)對象的數(shù)據(jù)結(jié)構(gòu)及相關(guān)的操作方法
B.Set
繼承Collection,存儲內(nèi)容無序且不可重復(fù)
C.List
繼承Collection,存儲元素有序且可以重復(fù)
D.SortedSet
繼承Set.可以對存儲內(nèi)容進(jìn)行排序
E.Map
定義存儲內(nèi)容為2個(gè)對象(鍵值對)的數(shù)據(jù)結(jié)構(gòu)及相關(guān)的操作方法
鍵(標(biāo)識性,所以不可重復(fù))對象無序且不可重復(fù),值對象可以重復(fù)順序由對應(yīng)的鍵對象決定
F.SortedMap
繼承Map,可以對鍵對象進(jìn)行排序
5)名詞解釋
A.無序:存儲順序與放入順序無關(guān)
B.有序:存儲順序與放入順序一致
C.排序:按照一定的邏輯對內(nèi)容進(jìn)行排序,存儲順序依照排序的結(jié)果進(jìn)行排列
6)實(shí)現(xiàn)類
A.List(3個(gè)實(shí)現(xiàn)類)
ArrayList:內(nèi)部存儲形式為數(shù)組,擅長查詢操作,對插入和刪除操作效率較低
LinkedList:內(nèi)部存儲形式為雙向鏈表.擅長插入和刪除操作,對查詢操作效率較低
Vector:ArrayList的線程安全版本,可保證多線程并發(fā)防問時(shí)的數(shù)據(jù)準(zhǔn)確和一致性,但對效率影響很大,實(shí)際開發(fā)中使用較少
B.HashSet的重復(fù)性判斷
i)在執(zhí)行add()操作時(shí)進(jìn)行,將加入的對象與集合中已存在的對象進(jìn)行比較,滿足相等性條件時(shí),待加入的對象無法加入集合中
ii)比較內(nèi)容
將2個(gè)對象調(diào)用equals()結(jié)果為true
將2個(gè)對象分別調(diào)用hashcode()的結(jié)果相同
同時(shí)滿足以上2個(gè)條件則判斷兩個(gè)對象相同
C.TreeSet
構(gòu)造器
TreeSet()--使用默認(rèn)的排序和重復(fù)性判斷邏輯
注:只有少量類型(String.包裝類型)存在默認(rèn)排序和重復(fù)性判斷邏輯,如Integer升序;如果對沒有默認(rèn)的排序和重復(fù)性判斷邏輯的對象使用該操作,將在執(zhí)行時(shí)產(chǎn)生ClassCastException
TreeSet(Comparator)--使用指定的比較器實(shí)現(xiàn)排序和重復(fù)性判斷邏輯
實(shí)現(xiàn)原理:在加入元素時(shí)執(zhí)行比較(原有元素和待加入的元素),比較時(shí)調(diào)用比較器的compare().根據(jù)返回值決定排列的順序是否重復(fù)
compare()的第一個(gè)參數(shù)--待加入的元素
compare()的第二個(gè)參數(shù)--集合中原有的元素
返回值
>0 待加入元素在原有元素的右邊
<0 待加入元素在原有元素的左側(cè)
=0 相同,待加入元素不加入
注:當(dāng)>0或<0時(shí),如集合的相應(yīng)方向存在未比較的元素,則應(yīng)繼續(xù)比較直至完全確定位置后才執(zhí)行加入
D.Map的實(shí)現(xiàn)類
HashMap和HashTable的關(guān)系相當(dāng)于ArrayList和Vector的關(guān)系
HashMap的重復(fù)性判斷規(guī)則(key)
在元素加入時(shí)(put)進(jìn)行判斷.方式與HashSet完全相同
E.TreeMap的排序和重復(fù)性判斷規(guī)則(key)
在元素加入時(shí)(put)進(jìn)行判斷.方式與TreeSet完全相同
2 import java.util.*;
3 public class ListTest {
4
5 /**
6 * @param args
7 */
8 public static void main(String[] args) {
9 // TODO Auto-generated method stub
10 String a="A",b="B",c="C",d="D",e="E"; //定義字符串對象
11 List<String> list= new LinkedList<String>(); //創(chuàng)建List集合
12 list.add(a); //集合中添加元素
13 list.add(e);
14 list.add(d);
15 Iterator<String> fristIterator=list.iterator();//創(chuàng)建集合迭代器
16 System.out.println("修改前集合中的元素為");
17 while(fristIterator.hasNext()){
18 System.out.println(fristIterator.next()+" ");
19 }
20 list.set(1,b);
21 list.set(2,c);
22 Iterator<String> it=list.iterator();
23 System.out.println("修改后集合中的元素為");
24 while(it.hasNext()){
25 System.out.println(it.next()+" ");
26 }
27
28 }
29
30 }
2 import java.util.*;
3 public class MapTest {
4
5 /**泛型應(yīng)用
6 * @param args
7 */
8 public static void main(String[] args) throws Exception {
9 // TODO Auto-generated method stub
10
11 //HashMap 定義泛型 類型變量
12 HashMap<String,Integer> maps= new HashMap<String,Integer>();
13 maps.put("zhangsan",28); //添加元素
14 maps.put("lisi",33);
15 maps.put("wangwu", 23);
16
17 //返回Set集合
18 Set<Map.Entry<String, Integer>> entrySet= maps.entrySet();
19
20 //迭代輸出集合
21 for(Map.Entry<String,Integer> entry : entrySet)
22 {
23 System.out.println(entry.getKey()+" "+entry.getValue());
24 }
25 //轉(zhuǎn)換類型
26 Object ob="abc";
27 String x3= autoConvert(ob);
28 }
29
30 private static <T> T autoConvert(Object object){
31 //泛型方法 類型轉(zhuǎn)換
32 return (T)object;
33 }
34
35 private static <T> void fillArray(T[] a,T obj ){
36 //將某個(gè)類型的對象 填充到 對應(yīng)類型的數(shù)組
37 for(int i=0;i<a.length;i++)
38 a[i]=obj;
39 }
40
41 }
posted on 2010-12-29 13:31 杰點(diǎn) 閱讀(219) 評論(0) 編輯 收藏 所屬分類: JAVA