Java集合的總體框架相關(guān)知識總結(jié)
一、集合概述
數(shù)組其實就是一個集合。集合實際上就是一個容器。可以來容納其它的數(shù)據(jù)。
二、集合在開發(fā)中的應(yīng)用
集合是一個容器,是一個載體,可以一次容納多個對象。在實際開發(fā)中,假設(shè)連接數(shù)據(jù)庫,數(shù)據(jù)庫當(dāng)中有10條記錄,那么假設(shè)把這10條記錄查詢出來,在Java程序中會將10條數(shù)據(jù)封裝成10個Java對象,然后將10個Java對象放到某一個集合當(dāng)中,將集合傳到前端,然后遍歷集合,將一個數(shù)據(jù)一個數(shù)據(jù)展現(xiàn)出來
三、集合存儲的數(shù)據(jù)
- Java集合中實際存放的只是對象的引用,每個集合元素都是一個引用變量,實際內(nèi)容都放在堆內(nèi)存或者方法區(qū)里面,但是基本數(shù)據(jù)類型是在棧內(nèi)存上分配空間的,棧上的數(shù)據(jù)隨時就會被收回的。
- 可以通過包裝類把基本類型轉(zhuǎn)為對象類型,存放引用就可以解決這個問題。更方便的,由于有了自動拆箱和裝箱功能,基本數(shù)據(jù)類型和其對應(yīng)對象(包裝類)之間的轉(zhuǎn)換變得很方便,想把基本數(shù)據(jù)類型存入集合中,直接存就可以了,系統(tǒng)會自動將其裝箱成封裝類,然后加入到集合當(dāng)中
注意:
- 集合在Java中本身是一個容器,是一個對象
- 集合中任何時候存儲的都是“引用”
- 集合里面存儲的是對象內(nèi)存地址
- 集合里面可以套集合
- 集合也是一個對象,也有內(nèi)存地址
在Java中每一個不同的集合,底層會對應(yīng)不同的數(shù)據(jù)結(jié)構(gòu)。往不同的集合中存儲元素,等于將數(shù)據(jù)放到了不同的數(shù)據(jù)結(jié)構(gòu)當(dāng)中。什么是數(shù)據(jù)結(jié)構(gòu)?數(shù)據(jù)存儲的結(jié)構(gòu)就是數(shù)據(jù)結(jié)構(gòu)。不同的數(shù)據(jù)結(jié)構(gòu),數(shù)據(jù)存儲方式不同。
比如
- 數(shù)組
- 二叉樹
- 鏈表
- 哈希表…
以上這些都是常用的數(shù)據(jù)結(jié)構(gòu)
你往集合c1中存放數(shù)據(jù),可能是放到數(shù)組上了。
你往集合c2中存放數(shù)據(jù),可能是放到二叉樹上了。
…
你使用不同的集合等同于使用了不同的數(shù)據(jù)結(jié)構(gòu)。new不同的對象,就是使用不同的數(shù)據(jù)結(jié)構(gòu)。如果對集合用法不了解,多去查JDK的API和百度
- new ArrayList(); 創(chuàng)建一個集合,底層是數(shù)組
- new LinkedList(); 創(chuàng)建一盒集合對象,底層是鏈表
- new TreeSet(); 創(chuàng)建一個集合對象,底層是二叉樹
四、集合的包
所有的集合類和集合接口都在Java.util包下,Java.util.*;
五、集合的兩大類
- 一類是單個方式存儲元素,單個方式存儲元素,這一類集合中超級父接口:Java.util.Collection;
- 一類是以鍵值對的方式存儲元素,以鍵值對的方式存儲元素,這一類集合中超級父接口:Java.util.Map;
Iterrator it = “Collection 對象”.iterator();
it是迭代器對象
synchronized
- 修飾一個代碼塊,被修飾的代碼塊稱為同步語句塊,其作用的范圍是大括號{}括起來的代碼,作用的對象是調(diào)用這個代碼塊的對象;
- 修飾一個方法,被修飾的方法稱為同步方法,其作用的范圍是整個方法,作用的對象是調(diào)用這個方法的對象;
- 修改一個靜態(tài)的方法,其作用的范圍是整個靜態(tài)方法,作用的對象是這個類的所有對象;
- 修改一個類,其作用的范圍是synchronized后面括號括起來的部分,作用主的對象是這個類的所有對象。
Iterable是接口
- 可迭代的,可遍歷的,所有集合元素都是可迭代的,可遍歷的
- 屬性:iterator()
Collection是接口
- collection繼承于Iterable
- 所有集合繼承Iterable的含義是:所有集合都是可迭代的
Iterator
- Iterator與Collection是關(guān)聯(lián)關(guān)系
- 集合的迭代器對象
- 屬性:hashNext(),next(),remove()…
List是接口
- List繼承于Collectionlist
- 集合元素的特點:有序可重復(fù),存儲的元素有下標(biāo)
- 有序?qū)嶋H上是說存進(jìn)去是這個順序,取出來還是這個順序,這里的順序不是按照大小排序
- 有序是因為list集合都有下標(biāo),下標(biāo)從0開始,以1遞增
ArrayList
- ArrayList繼承于ListArrayList
- 集合底層采用了數(shù)組這種數(shù)據(jù)結(jié)構(gòu)
- ArrayList集合是非線程安全的
LinkedList
- LinkedList繼承于List
- LinkedList集合底層采用了雙向鏈表數(shù)據(jù)結(jié)構(gòu)
Vector
- Vector繼承于List
- Vector集合底層采用了數(shù)組這種數(shù)據(jù)結(jié)構(gòu)
- Vector集合是線程安全的
- Vector所有的方法都有syndronized關(guān)鍵詞修飾,所以線程安全,但是效率較低,Vector用的少
Set是接口
- Set繼承于Collection
- Set集合存儲元素特點:無序不可重復(fù)
- 無序表示存進(jìn)去是這個順序,取出來就不一定是這個順序了
- Set集合中元素沒有下
- 標(biāo)Set集合中的元素不能重復(fù)
HashSet
- HashSet繼承于Set
- HashSet集合在new的時候,底層實際上new了一個HashMap集合
- 向HashSet集合中存儲元素,實際上是存儲到了HashMap集合中
- HashMap集合是一個哈希表數(shù)據(jù)結(jié)構(gòu)
SortedSet是接口
-SortedSet集合存儲元素的特點:無序不可重復(fù),但是放在SortedSet集合中的元素可以自動排序
SortedSet是可排序集合。放到該集合中的元素是自動按照大小順序排序
TreeSet
- TreeSet繼承于SortedSetTreeSet
- 集合底層實際上是TreeMap
- new TreeSet集合的時候,底層實際上new了一個TreeMap集合
- 往TreeSet集合中放數(shù)據(jù)的時候,實際上是將數(shù)據(jù)放到TreeMap集合中了
- TreeMap集合底層采用了二叉樹數(shù)據(jù)結(jié)構(gòu)
Map是接口
- Map集合和Collection集合沒有關(guān)系
- Map集合以key和value的這種鍵值對的存儲方式存儲元素
- key和value都是存儲Java對象的內(nèi)存地址
- 所有Map集合的key特點:無序不重復(fù)
- Map集合的key和Set集合存儲元素特點相同
HashMap
- HashMap繼承于Map
- HashMap集合底層是哈希表數(shù)據(jù)結(jié)構(gòu)
- 非線程安全的
- Hashable
- Hashable集合底層也是哈希表數(shù)據(jù)結(jié)
- 構(gòu)線程安全,其中所有方法都帶有synchronized關(guān)鍵字,效率低
SortedMap是接口
- SortedMap集合存儲元素特點:無序不可重復(fù)
- 放在SortedMap集合key部分的元素會自動按照大小順序排序
- 稱為可排序的集合
Properties
- Properties繼承Hashable,另外Properties存儲元素的時候也是采用key和value的形式存儲k
- ey和value只支持String類型,不支持其他類型
- Properties被稱為屬性類
TreeMap
- TreeMap集合底層的數(shù)據(jù)結(jié)構(gòu)是一個二叉樹
到此這篇關(guān)于Java集合的總體框架相關(guān)知識總結(jié)的文章就介紹到這了,更多相關(guān)Java集合框架內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在js與java中判斷json數(shù)據(jù)中是否含有某字段的案例
這篇文章主要介紹了在js與java中判斷json數(shù)據(jù)中是否含有某字段的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12SpringBoot整合PageHelper分頁無效的常見原因分析
這篇文章主要介紹了SpringBoot整合PageHelper分頁無效的常見原因分析,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08Springboot集成kafka高級應(yīng)用實戰(zhàn)分享
這篇文章主要介紹了Springboot集成kafka高級應(yīng)用實戰(zhàn)分享,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08關(guān)于spring依賴注入的方式以及優(yōu)缺點
這篇文章主要介紹了關(guān)于spring依賴注入的方式以及優(yōu)缺點,依賴注入,是IOC的一個方面,是個通常的概念,它有多種解釋,這概念是說你不用創(chuàng)建對象,而只需要描述它如何被創(chuàng)建,需要的朋友可以參考下2023-07-07關(guān)于Redis鍵值出現(xiàn)\xac\xed\x00\x05t\x00&錯誤的解決方法
這篇文章主要介紹了關(guān)于Redis鍵值出現(xiàn)\xac\xed\x00\x05t\x00&的解決方法,出現(xiàn)該問題的原因是, redis template向redis存放使用java對象序列化的值,序列化方式和string的一般方式不同,需要的朋友可以參考下2023-08-08