Java集合源碼全面分析
Java集合工具包位于Java.util包下,包含了很多常用的數(shù)據(jù)結(jié)構(gòu),如數(shù)組、鏈表、棧、隊(duì)列、集合、哈希表等。學(xué)習(xí)Java集合框架下大致可以分為如下五個(gè)部分:List列表、Set集合、Map映射、迭代器(Iterator、Enumeration)、工具類(Arrays、Collections)。
從上圖中可以看出,集合類主要分為兩大類:Collection和Map。
Collection是List、Set等集合高度抽象出來的接口,它包含了這些集合的基本操作,它主要又分為兩大部分:List和Set。
List接口通常表示一個(gè)列表(數(shù)組、隊(duì)列、鏈表、棧等),其中的元素可以重復(fù),常用實(shí)現(xiàn)類為ArrayList和LinkedList,另外還有不常用的Vector。另外,LinkedList還是實(shí)現(xiàn)了Queue接口,因此也可以作為隊(duì)列使用。
Set接口通常表示一個(gè)集合,其中的元素不允許重復(fù)(通過hashcode和equals函數(shù)保證),常用實(shí)現(xiàn)類有HashSet和TreeSet,HashSet是通過Map中的HashMap實(shí)現(xiàn)的,而TreeSet是通過Map中的TreeMap實(shí)現(xiàn)的。另外,TreeSet還實(shí)現(xiàn)了SortedSet接口,因此是有序的集合(集合中的元素要實(shí)現(xiàn)Comparable接口,并覆寫Compartor函數(shù)才行)。
我們看到,抽象類AbstractCollection、AbstractList和AbstractSet分別實(shí)現(xiàn)了Collection、List和Set接口,這就是在Java集合框架中用的很多的適配器設(shè)計(jì)模式,用這些抽象類去實(shí)現(xiàn)接口,在抽象類中實(shí)現(xiàn)接口中的若干或全部方法,這樣下面的一些類只需直接繼承該抽象類,并實(shí)現(xiàn)自己需要的方法即可,而不用實(shí)現(xiàn)接口中的全部抽象方法。
Map是一個(gè)映射接口,其中的每個(gè)元素都是一個(gè)key-value鍵值對,同樣抽象類AbstractMap通過適配器模式實(shí)現(xiàn)了Map接口中的大部分函數(shù),TreeMap、HashMap、WeakHashMap等實(shí)現(xiàn)類都通過繼承AbstractMap來實(shí)現(xiàn),另外,不常用的HashTable直接實(shí)現(xiàn)了Map接口,它和Vector都是JDK1.0就引入的集合類。
Iterator是遍歷集合的迭代器(不能遍歷Map,只用來遍歷Collection),Collection的實(shí)現(xiàn)類都實(shí)現(xiàn)了iterator()函數(shù),它返回一個(gè)Iterator對象,用來遍歷集合,ListIterator則專門用來遍歷List。而Enumeration則是JDK1.0時(shí)引入的,作用與Iterator相同,但它的功能比Iterator要少,它只能再Hashtable、Vector和Stack中使用。
Arrays和Collections是用來操作數(shù)組、集合的兩個(gè)工具類,例如在ArrayList和Vector中大量調(diào)用了Arrays.Copyof()方法,而Collections中有很多靜態(tài)方法可以返回各集合類的synchronized版本,即線程安全的版本,當(dāng)然了,如果要用線程安全的結(jié)合類,首選Concurrent并發(fā)包下的對應(yīng)的集合類。
以上這篇Java集合源碼全面分析就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Boot整合MybatisPlus逆向工程(MySQL/PostgreSQL)
MyBatis-Plus是MyBatis的增強(qiáng)工具,本文主要介紹了Spring Boot整合MybatisPlus逆向工程(MySQL/PostgreSQL),具有一定的參考價(jià)值,感興趣的可以了解一下2021-07-07Java通過MyBatis框架對MySQL數(shù)據(jù)進(jìn)行增刪查改的基本方法
MyBatis框架由Java的JDBC API進(jìn)一步封裝而來,在操作數(shù)據(jù)庫方面效果拔群,接下來我們就一起來看看Java通過MyBatis框架對MySQL數(shù)據(jù)進(jìn)行增刪查改的基本方法:2016-06-06劍指Offer之Java算法習(xí)題精講N叉樹的遍歷及數(shù)組與字符串
跟著思路走,之后從簡單題入手,反復(fù)去看,做過之后可能會(huì)忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會(huì)發(fā)現(xiàn)質(zhì)的變化2022-03-03SpringBoot SSE服務(wù)端主動(dòng)推送事件的實(shí)現(xiàn)
本文主要介紹了SpringBoot SSE服務(wù)端主動(dòng)推送事件的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-06-06