集合框架 容器

一、集合:起到中轉作用,配合數據庫一起使用
	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;


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章