1. 程式人生 > >Java基礎15-集合框架

Java基礎15-集合框架

1.優點

長度可改變
可以獲取到有效元素的個數
適合於物件的儲存,存進去後,預設是Object型別

2.關係圖:

3.分類

   《1》:.單值:Collection系列

實現了Iterable介面
常用方法:
   
    1、新增元素:add(E e)   addAll(Collection c)
    2、移除元素:remove()   removeAll() 
		判斷的依據呼叫元素的equals()
    3、判斷是否包含某個元素:contains()
	    判斷的依據呼叫元素的equals()
    4、獲取有效元素的個數:size()
    5、清空集合的方法:clear()
    6、是否為空集合:isEmpty()
    6、取兩個集合交集:retain(Collection c)影響的是當前集合
    7、獲取迭代器物件的方法:iterator(),從Iterable繼承的過來的方法
    8、返回陣列:toArray()

子介面:   1.List:有序的,可以重複的

實現類:
      ArrayList
      底層的實現,陣列結構,相對Vector是新的,執行緒不安全的,效率比Vector高,擴充套件的演算法是1.5倍
      Vector
      底層的實現,陣列結構,相對ArrayList是舊版本,執行緒安全的,效率低,擴充套件的演算法2倍,還支援舊版本的迭代Enumration
      LinkedList
      底層的實現,連結串列,適合於插入,刪除操作頻繁
      多一種迭代的方法:ListIterator,支援雙向的遍歷

  2.Set:無序的,不可重複

實現類
     HashSet
     區分是否是重複元素的依據:先判斷hashcode是否相同,如果相同再判斷equals
     LinkedHashSet:維護新增的順序,即表示遍歷的順序與新增的順序的一致
     TreeSet
     區分是否是重複元素的依據,呼叫Comparable介面的compareTo()方法或者是Comparator的compare()

hashSet圖解:陣列加連結串列遍歷的方式:       

Iterator迭代
     方法:
         hasNext()
         next()
         remove()
     注意:不支援雙向遍歷,只能從前往後遍歷,每次遍歷之前重新獲取迭代器物件
     迭代過程中刪除元素,呼叫迭代器物件的iter.remove()方法,而不是Collection的remove(Object obj)  
       程式碼:
        Iterator iter = list.iterator();
        while(iter.hasNext()){
	        Sysout(iter.next())
        } 
foreach
    注意:在遍歷的同時不支援刪除,新增,替換元素的操作(修改的元素的地址),但是可以修改元素的屬性, 
for(元素的型別  迭代變數 : 集合名稱)
{
	迭代變數每一次代表一個元素物件
}

《2》:對值,鍵值對Map系列

實現類
	Hashtable
		底層使用hash表儲存hashcode碼
		Properties:用於讀取屬性配置檔案
	HashMap
		相對Hashtable版本較新,執行緒不安全,效率高
		保證key不能重複,是key的型別的hashcode方法和equals方法
		LinkedHashMap:維護的新增鍵值對的順序
	TreeMap
		底層:實現二叉樹
		排序,只對key排序,不對value排序
		放到TreeMap中的key要實現Comparable介面,重寫compareTo(),或者在建立TreeMap物件時,傳一個Comparator物件,重寫compare(),注意也是針對key的排序

首先會有一個檔案,以.properties結尾
Properties pro = new Properties();

pro.load(ClassLoader.getSystemClassLoader().getResourceAsStream("檔名.properties"));
//這是表示檔案在src的根目錄下,如果在某個包中
("包/子包/檔名.properties")

String value = pro.getProperty("key");

注意:所有Map的key是不能重複2.Map中常用的方法     

新增資料:put(Object key,Object value)
刪除:remove(Object obj)
修改:put(Object key,Object value)
查詢:Object get(Object key)
長度:size()
遍歷:keySet()/values()/entrySet()

Map的理解:

 *   說明:
 *   1.Map中一個key-value構成一個entry
 *   2.Map中的所有的key,構成一個Set集合。意味著:key要求是不可重複的,也就是要求Key所在的類
 *     要重寫 equals()和hashCode()
 *   3.	Map中的所有的value,是可以重複的,使用Collection存放。要求value所在的類要重寫equals()
 *   4.所有的entry構成一個Set集合

  1.HashMap的底層實現原理:

HashMap的底層實現原理:儲存結構中使用了陣列結構和連結串列結構
 *	 當新增一個元素時,首先根據entry中key所在類的hashCode()得到key的hashCode值,根據此值,決定在
 *底層陣列中的存放位置,如果此位置上沒有其他元素,則直接新增成功。如果此位置上已經有元素存在,則呼叫key所在類
 *的equals()方法,如果返回true,則使用新新增的entry的value替換原有位置entry的value.如果返回false,
 *則新的entry仍能新增成功,與舊的entry之間使用連結串列儲存。

泛型    

類的泛型--》定義在類或介面上
泛型方法
泛型大量的在集合,反射部分見到 

泛型類:

class 類名<泛型的符號,例如T>{
	//在類中任意可以表示型別的地方都可以使用該T代替
	//除了靜態方法,catch,靜態屬性的型別不能使用
}

T的型別在建立該類的物件,繼承該類的子類時,也可以確定該T的具體型別

泛型方法:

修飾符  <T> 返回值型別  方法名(引數 ){}

該形式的T可以用在引數的型別和返回值的型別,只對該方法有效
而且該方法可以是靜態也可以是非靜態的

根據呼叫該方法時傳遞的實參的型別,來確定T的具體代表的型別

Collections工具類   

 排序:sort()
    反轉:reverse()
    執行緒安全的:synchronizedXxx()
    複製:copy(List dest,List src)
        引申:陣列 <=>集合
            陣列--->集合:List list = Arrays.asList(Obect ... objs);
            集合--->陣列:Object[] arr = list.toArray();
    ...