Java基礎15-集合框架
阿新 • • 發佈:2018-12-19
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();
...