一、集合:起到中轉作用,配合數據庫一起使用 Collection(可以存儲無序,可重複的數據) Map | List(有序可重複) Set(無序不重複) HashMap | | ArrayList/LinkedList HashSet/TreeSet 數組的缺點: 1.長度一經確定不能修改 2.增刪該的操作比較麻煩 1、ArrayList a.添加:add() 2、隊列遍歷方法 ArrayList和LinkedList的優缺點: ArrayList:底層是數組,查詢遍歷的效率更高、 LinkedList:底層是鏈表,查詢遍歷的效率更低,增加刪除元素效率高 Array(數組) Arrays(數組的幫助類) sort(數組名) int[] a={2,1,3}; Arrays.sort(a); Collection Collections(操作類) sort(隊列名) max(隊列名) min(隊列名) ArrayList arr=new ArrayList(); arr.add(2); arr.add(1); arr.add(3); Collections.sort(arr); 二. 集合框架 容器 數組:長度是固定的。類型是固定的。 集合:長度可變,可以放任何類型的對象 1.ArrayList 集合:又名動態數組,可以容納任意長度,任意類型的對象 構造函數 ArrayList() ArratList(int length) 常用方法:add(obj),add(index,obj); size(); isEmpty(); get(index); set(index,obj); contains(obj); 判斷是否包含對象o indexOf(obj); remove(obj),remove(index); clear(); 2.LinkedList集合:鏈表 ,類似與ArrayList,但存儲方式不相同(順序排放與鏈表結構排放) 構造函數 : LinkedList(); LinkedList(int length); 常用方法:基本等同於ArrayList addFirst() addLast() getFirst() getLast() removeFirst() removeLast(); 3.Vector:線程安全集合 4.集合中存放的都是引用:集合的每個元素並不代表就是對象,其實只是引用,指向對象的地址。 5.集合的繼承體系: Collection : 可以重複,無序集合 List(ArrayList,LinkedList,Vector) :可以重複,有序集合 Set (HashSet):不能重複,無序集合 Map: HashMap 鍵(Set):不能重複,無序集合 值(Collection):可以重複,無序集合 6.set類型的集合: HashSet 主要方法: add(),remove(),size(),clear(); contains(o) 判斷是否包含對象o 特點:不能添加重複對象。 如何確定兩個對象是否相同:除了equals方法返回爲true,hashCode()方法返回值也必須相同,該返回值用來確定每個對象在set中的位置, 只有相同才能保證會放到HashSet中的同一個位置。 7.迭代器 Iterator Set集合沒有索引,不能使用get訪問,但所有Collection的子類都能通過迭代器進行循環訪問每個元素。(參考上課代碼) 8.Map類型集合:HashMap 1.與Collection集合不同,Map類型集合每個元素值 都包含兩個對象:鍵--值 鍵在Map中不能有重複對象,值是可以重複的 2.主要方法: put(key,value); size(); remove(key),clear(); containsKey(key) 判斷是否包含鍵key containsValue(value)判斷是否包含值value 其中put方法若添加重複的鍵,則表示覆蓋原來的鍵 3.Map不存在索引,但同樣可以實現循環訪問: 使用:keySet()或entrySet() 9.Collections 集合工具類 常用方法(靜態):sort(List) 給List類型的集合排序(元素必須包含CompareTo方法) reverse(List) 將List類型的集合反轉 Arrays 數組工具類 10.泛型:集合可以存儲任何類型的數據,那能不能指定集合只能存儲那種類型的數據呢?--泛型 1.定義類時可以在類名後添加泛型。如MyClass<T> T 表示泛型參數,可以是任何類名. 定義函數時,可以用T作爲參數,則必須傳遞T所指代的類型爲參數。 2.泛型的應用 A.如果MyClass爲普通類,創建對象時可以爲MyClass指定一個泛型。MyClass的函數中以泛型作爲參數類型的,就必須傳入指定的類型 class MyClass<T>{ void fn(T o){ ....... } public static void main(String [] args){ MyClass<String> mc1 =new MyClass<String>(); mc1.fn("hello"); MyClass<People> mc2 = new MyClass<People>(); mc2.fn(new People()); ArrayList<People> arr = new ArrayList<People>(); arr.add(new People()); //只能傳入People對象 HashMap<String,People> = new HashMap<String,People>(); } } B.如果MyClass作爲父類:抽象類或接口。在繼承時,也可以傳入泛型。 則子類繼承父類的含泛型的非抽象方法時,必須傳入泛型指定的類型。 非抽象的方法,重寫時也必須按泛型指定的類型作爲參數類型. 如 父類 abstract class MyClass<T>{ public void fn(T o){ ........ } public void fm(T o); } 子類 class MyC extends MyClass<People>{ public void fm(People o) { //重寫父類泛型抽象方法 ........ } public static void main(String [] args){ MyC c = new MyC(); c.fn(new People());//繼承父類泛型方法 } } 某個類實現Comparable接口時就是這種使用方式 3.實際上,屬性,方法的返回值都可以以泛型作爲類型。 4.當創建對象,或繼承時不時用泛型,則類型都爲Object;
集合框架 容器
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.