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

Java集合學(xué)習(xí)筆記
一、集合
1.?概念:對象的容器,定義了對個對象操作的常用方法??蓪崿F(xiàn)數(shù)組的功能。
2.?和數(shù)組的區(qū)別:
(1)數(shù)組的容量是(長度length)是固定的
(2)數(shù)組中存放的數(shù)據(jù)的數(shù)據(jù)類型是固定的,和一開始創(chuàng)建數(shù)組約定的數(shù)據(jù)類型必須相同。
(3)集合的長度是可變的,可動態(tài)擴(kuò)容。
(4)允許存放不同類型的元素。
二、Collection集合
1.?定義
Collection是單列集合,用于存儲單個元素
Collection是一個接口,他下面有多個子接口和實現(xiàn)類,我們稱為Collection體系。
2.分類
List集合中的元素是有序的,可重復(fù)
Queue隊列,除優(yōu)先級外,保持先進(jìn)先出的原則(基本不用)
Set集合的元素是無序的,元素不能重復(fù)。
3.常用方法
Collection 集合名=new ArrayList();
添加元素:集合名.add()里面可以是任何類型
刪除元素:集合名.remove()
查詢集合中元素個數(shù):集合名.size()
查詢集合中是否包含某個元素:集合名.contains()
判斷集合元素個數(shù)是否為空 isEmoty()
三、List集合(接口)實現(xiàn)類
1.ArrayList【重點(diǎn)】:
低層用數(shù)組結(jié)構(gòu)實現(xiàn),查詢快、增刪慢;JDK1.2版本,運(yùn)行效率快、線程不安全。
List list=new ArrayList();
add(int index,E element)?指定位置插入元素
get(int index)返回此列表中指定位置的元素
indexOf(Object o)返回指定元素第一次出現(xiàn)的索引,如果沒有則返回-1
2.ArrayList源碼分析
在我們new ArrayList時,elmentData是空數(shù)組,如果沒有向集合中添加任何元素時,容量0,在第一次執(zhí)行add方法時,會給elementData賦予一個容量是10的新數(shù)組,在新數(shù)組里面添加元素。
DEFAULT_CAPACITY = 10;默認(rèn)容量
每次擴(kuò)容大小是原來的1.5倍
3.迭代器遍歷
hasNext()如果迭代有更多的元素,返回true
next()返回迭代的下一個元素
Iterator iterator=list.iterator();
while(iterator.hsaNext()){iterator.next();}輸出可以轉(zhuǎn)換類型
4.綜合練習(xí):去除集合中的重復(fù)字符串元素
List list=new ArrayList();//舊的集合,里面有重復(fù)的元素
List newList=new ArrayList();//創(chuàng)建新的集合
//通過迭代器的方式遍歷舊集合
Iterator iterator = list.iterator();
while (iterator.hasNext()){
??????String next=(String)iterator.next();//獲取元素
??????//判斷元是否存在于新的集合中,如果不存在則添加,達(dá)到去重目的
??????if(!newList.contains(next)){
????????newList.add(next);
??????}
????}
System.out.println(newList.toString());
四、Vector實現(xiàn)類
Vector:
數(shù)組結(jié)構(gòu)實現(xiàn),查詢快、增刪慢;JDK1.0版本,運(yùn)行效率慢、線程安全。
五、LinkedList實現(xiàn)類
LinkedList:
低層用鏈表結(jié)構(gòu)實現(xiàn),增刪快,查詢慢。
六、Set子接口
特點(diǎn):無序、無下標(biāo),元素不可重復(fù)。
方法:全部繼承自Collection中的方法。
七、HashSet實現(xiàn)類
HashSet【重點(diǎn)】:
基于hashCode、equals實現(xiàn)元素不重復(fù)。當(dāng)存入元素的哈希碼相同時,會調(diào)用==或equals進(jìn)行確認(rèn),結(jié)果為true,拒絕后者存入。
八、LinkedHashSet實現(xiàn)類
?LinkedHashSet:
鏈表實現(xiàn)的HashSet,按照鏈表進(jìn)行存儲,即可保留元素的插入順序。
九、TreeSet實現(xiàn)類
TreeSet:
基于排列順序?qū)崿F(xiàn)元素不重復(fù)。
實現(xiàn)了SortedSet接口,對集合元素自動排序。
元素對象的類型必須實現(xiàn)Comparable接口,指定排序規(guī)則。
通過CompareTo方法確定是否為重復(fù)元素。
十、Comparator接口
Comparator比較器
可以實現(xiàn)定制比較,元素自身提供的比較規(guī)則稱為自然排序。
compare(o1,o2),如果返回值為0,則為重復(fù)元素。
使用Comparator比較器,元素類型可不實現(xiàn)Comparable接口,并且優(yōu)先級高于Comparable接口。
十一、Map集合
1.定義
Map集合稱為“映射”存儲一對數(shù)據(jù)(Key-Value),鍵不可重復(fù),值可以重復(fù)。如果出現(xiàn)相同的鍵,會用新的值覆蓋老的值。
常用方法:
V put(K key,V value) //將對象存入到集合中,關(guān)聯(lián)鍵值。key重復(fù)則覆蓋原值。
Object get(Object key) //根據(jù)鍵獲取對應(yīng)的值。
Set<K> keySet()//返回所有key。
Collection<V> values() //返回包含所有值的Collection集合。
Set<Map.Entry<K,V>> entrySet() //鍵值匹配的Set集合。
十二、Map集合的實現(xiàn)類
HashMap【重點(diǎn)】:
JDK1.2版本,線程不安全,運(yùn)行效率快 ;允許用null 作為key或是value。
LinkedHashMap:
有順序的HashMap。
TreeMap :
實現(xiàn)了SortedMap接口(Map的子接口),可以對key自動排序,Key需實現(xiàn)Comparable接口。
十三、Hashtable實現(xiàn)類
Hashtable :
JDK1.0版本,線程安全,運(yùn)行效率慢;不允許null作為key或是value。
十四、Properties實現(xiàn)類
Hashtable的子類,要求key和value都是String。通常用于配置文件的讀取。
十五、HashMap源碼分析
HashMap剛創(chuàng)建時,table是null,為了節(jié)省空間,當(dāng)添加第一個元素時,table容量調(diào)整為16。
當(dāng)元素個數(shù)大于閾值(16*0.75=12)時,會進(jìn)行擴(kuò)容,擴(kuò)容后大小為原來的2倍。目的是減少調(diào)整元素的個數(shù)。
jdk1.8 當(dāng)每個鏈表長度大于8,并且數(shù)組元素個數(shù)大于等于64時,會調(diào)整為紅黑樹,目的提高執(zhí)行效率。
jdk1.8 當(dāng)鏈表長度小于等于6時,調(diào)整成鏈表。
jdk1.8以前,鏈表是頭插入,jdk1.8以后是尾插入。
把對象存儲到哈希表中如何存儲?
我們把key對象通過hash()方法計算出它的hash值,然后用這個hash值對數(shù)組的長毒取余計算,來決定該key對象在數(shù)組中的存儲位置,當(dāng)這個位置有多個對象時,以鏈表結(jié)構(gòu)存儲。jdk1.8 以后,當(dāng)每個鏈表長度大于8,并且數(shù)組元素個數(shù)大于等于64時,會調(diào)整為紅黑樹
十六、泛型
????A.Java泛型是JDK1.5中引入的一個新特性,其本質(zhì)是參數(shù)化類型,把類型作為參數(shù)傳遞。
B.常見形式有泛型類、泛型接口、泛型方法。
C.語法:
<T,...>?T稱為類型占位符,表示一種引用類型。
D.好處:
提高代碼的重用性,防止類型轉(zhuǎn)換異常,提高代碼的安全性
E.?注意事項
F.?泛型集合
????1.概念:參數(shù)化類型、類型安全的集合,強(qiáng)制集合元素的類型必須一致。
2.特點(diǎn):
編譯時即可檢查,而非運(yùn)行時拋出異常。
訪問時,不必類型轉(zhuǎn)換(拆箱)。
不同泛型之間引用不能相互賦值。