千鋒教育Java入門全套視頻教程(java核心技術,適合java零基礎,Java

集合
一、集合
1.概念:對象的容器,定義了對個對象操作的常用方法。可實現(xiàn)數(shù)組的功能。
2.和數(shù)組的區(qū)別:
???數(shù)組長度固定,集合長度不固定。
???數(shù)組可以存儲基本數(shù)據(jù)類型和引用數(shù)據(jù)類型,集合只能存儲引用數(shù)據(jù)類型。
3.位置:java.util.*;
二、Collection集合
1.Collection父接口:是該體系結構的根接口,代表一組“對象”,被稱為“集合”。每個對象都是該集合的“元素”。
2.List接口特點:有序、有下標,元素可以重復。
3.Set接口特點:無序、無下標,元素不能重復。(唯一)
三、List接口
List子接口
A.有序、有下標、元素可以重復。
B.繼承父接口可繼承提供的共性方法,同時定義了獨有的與索引相關的方法。
四、List實現(xiàn)類
??ArrayList【重點】:
數(shù)組結構實現(xiàn),查詢快、增刪慢;
JDK1.2版本,運行效率快、線程不安全。
??ArrayList源碼分析
????分析:
DEFAULT_CAPACITY = 10;默認容量?
如果沒有向集合中添加任何元素時,容量0,添加一個元素之后 容量10
每次擴容大小是原來的1.5倍
elementData存放元素的數(shù)組?
size?實際元素個數(shù)
add()?添加元素
五、Vector實現(xiàn)類
??Vector:
數(shù)組結構實現(xiàn),查詢快、增刪慢;
JDK1.0版本,運行效率慢、線程安全。
六、LinkedList實現(xiàn)類
???LinkedList:
鏈表結構實現(xiàn),增刪快,查詢慢。
七、數(shù)據(jù)結構:棧、隊列
???
八、泛型
??A.Java泛型是JDK1.5中引入的一個新特性,其本質是參數(shù)化類型,把類型作為參數(shù)傳遞。
B.常見形式有泛型類、泛型接口、泛型方法。
C.語法:
<T,...>?T稱為類型占位符,表示一種引用類型。
D.好處:
提高代碼的重用性
防止類型轉換異常,提高代碼的安全性
E.注意事項
??
F.泛型集合
??1.概念:參數(shù)化類型、類型安全的集合,強制集合元素的類型必須一致。
2.特點:
編譯時即可檢查,而非運行時拋出異常。
訪問時,不必類型轉換(拆箱)。
不同泛型之間引用不能相互賦值。?
九、Set子接口
特點:無序、無下標,元素不可重復。
方法:全部繼承自Collection中的方法。
十、HashSet實現(xiàn)類
??HashSet【重點】:
基于hashCode、equals實現(xiàn)元素不重復。
當存入元素的哈希碼相同時,會調用==或equals進行確認,結果為true,拒絕后者存入。
十一、LinkedHashSet實現(xiàn)類
???LinkedHashSet:
鏈表實現(xiàn)的HashSet,按照鏈表進行存儲,即可保留元素的插入順序。
十二、TreeSet實現(xiàn)類
???TreeSet:
基于排列順序實現(xiàn)元素不重復。
實現(xiàn)了SortedSet接口,對集合元素自動排序。
元素對象的類型必須實現(xiàn)Comparable接口,指定排序規(guī)則。
通過CompareTo方法確定是否為重復元素。
十三、Comparator接口
???Comparator比較器
可以實現(xiàn)定制比較,元素自身提供的比較規(guī)則稱為自然排序。
compare(o1,o2),如果返回值為0,則為重復元素。
使用Comparator比較器,元素類型可不實現(xiàn)Comparable接口,并且優(yōu)先級高于Comparable接口。
十四、Map集合
A.特點:稱為“映射”存儲一對數(shù)據(jù)(Key-Value),鍵不可重復,值可以重復。
B.方法:
???V put(K key,V value) //將對象存入到集合中,關聯(lián)鍵值。key重復則覆蓋原值。?
Object get(Object key) //根據(jù)鍵獲取對應的值。
Set<K> keySet()//返回所有key。
Collection<V> values() //返回包含所有值的Collection集合。
Set<Map.Entry<K,V>> entrySet() //鍵值匹配的Set集合。
十五、Map集合的實現(xiàn)類
???HashMap【重點】:
JDK1.2版本,線程不安全,運行效率快 ;允許用null 作為key或是value。
LinkedHashMap:
有順序的HashMap。
TreeMap :
實現(xiàn)了SortedMap接口(Map的子接口),可以對key自動排序,Key需實現(xiàn)Comparable接口。
十六、Hashtable實現(xiàn)類
???Hashtable :
JDK1.0版本,線程安全,運行效率慢;不允許null作為key或是value。
十七、Properties實現(xiàn)類
????Hashtable的子類,要求key和value都是String。通常用于配置文件的讀取。
十八、總結
????
十九、HashMap源碼分析
???分析:
HashMap剛創(chuàng)建時,table是null,為了節(jié)省空間,當添加第一個元素時,table容量調整為16。
當元素個數(shù)大于閾值(16*0.75=12)時,會進行擴容,擴容后大小為原來的2倍。目的是減少調整元素的個數(shù)。
jdk1.8 當每個鏈表長度大于8,并且數(shù)組元素個數(shù)大于等于64時,會調整為紅黑樹,目的提高執(zhí)行效率。
jdk1.8 當鏈表長度小于等于6時,調整成鏈表。
jdk1.8以前,鏈表是頭插入,jdk1.8以后是尾插入。