集合
9.集合框架
1)基本概念:用于存放對象的對象(與數組類似.即集合也是對象.只能存對象)
2)和數組的差異
A.數組存放的內容由數組類型指定,集合存放的內容為Object類型的引用
B.數組只有1種數據結構(按照索引存儲),集合的數據結構分為Set.List和Map三大類.每個類中還包含若干的小類
C.數組的容量在創建時指定,無法在使用中動態擴展.所有集合類型的容量都是不定的.根據需求自動擴展
3)基本組成
A.接口:用于定義集合的功能框架
B.實現類:實現對應的接口.實現集合的具體功能
C.工具:提供對集合操作的輔助功能
4)接口
A.Collection
定義存儲內容為單個對象的數據結構及相關的操作方法
B.Set
繼承Collection,存儲內容無序且不可重復
C.List
繼承Collection,存儲元素有序且可以重復
D.SortedSet
繼承Set.可以對存儲內容進行排序
E.Map
定義存儲內容為2個對象(鍵值對)的數據結構及相關的操作方法
鍵(標識性,所以不可重復)對象無序且不可重復,值對象可以重復順序由對應的鍵對象決定
F.SortedMap
繼承Map,可以對鍵對象進行排序
5)名詞解釋
A.無序:存儲順序與放入順序無關
B.有序:存儲順序與放入順序一致
C.排序:按照一定的邏輯對內容進行排序,存儲順序依照排序的結果進行排列
6)實現類
A.List(3個實現類)
ArrayList:內部存儲形式為數組,擅長查詢操作,對插入和刪除操作效率較低
LinkedList:內部存儲形式為雙向鏈表.擅長插入和刪除操作,對查詢操作效率較低
Vector:ArrayList的線程安全版本,可保證多線程并發防問時的數據準確和一致性,但對效率影響很大,實際開發中使用較少
B.HashSet的重復性判斷
i)在執行add()操作時進行,將加入的對象與集合中已存在的對象進行比較,滿足相等性條件時,待加入的對象無法加入集合中
ii)比較內容
將2個對象調用equals()結果為true
將2個對象分別調用hashcode()的結果相同
同時滿足以上2個條件則判斷兩個對象相同
C.TreeSet
構造器
TreeSet()--使用默認的排序和重復性判斷邏輯
注:只有少量類型(String.包裝類型)存在默認排序和重復性判斷邏輯,如Integer升序;如果對沒有默認的排序和重復性判斷邏輯的對象使用該操作,將在執行時產生ClassCastException
TreeSet(Comparator)--使用指定的比較器實現排序和重復性判斷邏輯
實現原理:在加入元素時執行比較(原有元素和待加入的元素),比較時調用比較器的compare().根據返回值決定排列的順序是否重復
compare()的第一個參數--待加入的元素
compare()的第二個參數--集合中原有的元素
返回值
>0 待加入元素在原有元素的右邊
<0 待加入元素在原有元素的左側
=0 相同,待加入元素不加入
注:當>0或<0時,如集合的相應方向存在未比較的元素,則應繼續比較直至完全確定位置后才執行加入
D.Map的實現類
HashMap和HashTable的關系相當于ArrayList和Vector的關系
HashMap的重復性判斷規則(key)
在元素加入時(put)進行判斷.方式與HashSet完全相同
E.TreeMap的排序和重復性判斷規則(key)
在元素加入時(put)進行判斷.方式與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>(); //創建List集合
12 list.add(a); //集合中添加元素
13 list.add(e);
14 list.add(d);
15 Iterator<String> fristIterator=list.iterator();//創建集合迭代器
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 /**泛型應用
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 //轉換類型
26 Object ob="abc";
27 String x3= autoConvert(ob);
28 }
29
30 private static <T> T autoConvert(Object object){
31 //泛型方法 類型轉換
32 return (T)object;
33 }
34
35 private static <T> void fillArray(T[] a,T obj ){
36 //將某個類型的對象 填充到 對應類型的數組
37 for(int i=0;i<a.length;i++)
38 a[i]=obj;
39 }
40
41 }
posted on 2010-12-29 13:31 杰點 閱讀(219) 評論(0) 編輯 收藏 所屬分類: JAVA