150天打卡Day24_集合深度解析- Java集合體系
Java集合框架概述
集合,數(shù)組都是對多個數(shù)據(jù)進行存儲操作的結(jié)構(gòu),簡稱Java容器,此時的存儲主要是內(nèi)存層面的,不涉及到持久化存儲
數(shù)組在存儲多個數(shù)據(jù)方面的缺點
一旦初始化以后,其長度就確定了,不可修改,
數(shù)組一旦定義好類型,其類型就確定了,只能操作指定類型的數(shù)據(jù)
數(shù)組中提供的方法有限,對于例如插入,刪除操作非常不便,效率很低
獲取數(shù)組中實際元素個數(shù)的需求,數(shù)組中沒有現(xiàn)成的屬性或方法可用
數(shù)組存儲數(shù)據(jù)的特點:有序可重復,對于一些無序不可重復的需求,數(shù)組也不能滿足
Java集合體系介紹 ?
Java集合可以分為Collection和Map兩種體系,位于Java.util包下
Collection:存放單列數(shù)據(jù),定義了存取一組對象的方法的集合
下分兩類:
List:元素有序,可重復的集合(ArrayList,LinkedList,vector)
set:元素無序,不可重復的集合(HashSet,LinkedHashSet,TreeSet)
Map:存放雙列數(shù)據(jù),保存具有映射關(guān)系的"key-value"對的集合
(HashMap,LinkedHashMap,TreeMap,HashTable,Properties)
集合這里的有序不是排序,指的是添加順序和取出順序一致
Collection和Collections的區(qū)別
Collection是一個單列集合接口,提供了對集合對象進行基本操作的通用接口方法
Collections是一個包裝類,包含1很多對集合操作的靜態(tài)方法,此類不能被實例化,是一個工具類,服務(wù)于Java的Collection集合
集合迭代器 iterator
迭代器常用來遍歷集合
Foreach循環(huán)遍歷(內(nèi)部仍然是迭代器)
Collection子接口之一:List接口
鑒于Java中用數(shù)組存儲數(shù)據(jù)的局限性,通常使用LIst代替數(shù)組
List集合中元素有序,且可重復,集合中每個元素都有其對應(yīng)的順序索引
List容器中的元素都有對應(yīng)一個整數(shù)型的序號記載其在容器中的位置,可以根據(jù)序號存取元素
List接口常用的實現(xiàn)類:ArrayList,LinkedList,Vector
ArrayList,LinkedList,Vector的異同
相同點
均實現(xiàn)了List接口,擁有List集合的特性
不同點
ArrayList作為List接口最常用的實現(xiàn)類,線程不安全,效率高,底層是一個Object類型的數(shù)組elementdata,在JDK1.2版本問世
LinkedList底層使用雙向鏈表存儲,線程不安全,對于頻繁的插入,刪除操作,效率高于ArrayList,查找效率低于ArrayList,因為缺少按索引查找
Vector和ArrayList基本一致,底層公共方法均加了Synchronized關(guān)鍵字,線程安全,效率較低,底層也是Object[] elementData ,JDK1.0版本就問世了
ArrayList源碼分析
底層創(chuàng)建的初始長度為10的Object類型的數(shù)組elementData,擴容擴為原來的1.5倍,同時將原有數(shù)組中的數(shù)據(jù)拷貝到新數(shù)組中,建議開發(fā)中創(chuàng)建數(shù)組使用ArrayList帶參構(gòu)造器,指定初始容量,減少擴容可以使效率提高
JDK1.8ArrayList變化
創(chuàng)建時不指定容量,第一次調(diào)用add方法才創(chuàng)建初始容量為10的數(shù)組elementdata,其余與1.7一致
LinkedList源碼分析
底層采用雙向鏈表進行存儲,底層數(shù)據(jù)存儲的基本單位是Node,內(nèi)部聲明了Node類型的prev和next屬性, 默認值為null,進行添加操作相當于把元素封裝到Node中,創(chuàng)建了Node對象
Vector源碼分析
與ArrayList很相似,公共方法均添加了synchronized關(guān)鍵字,保證線程安全
Vector底層擴容,擴容為原來的2倍
大家記得給關(guān)阿姨點個關(guān)注呦
