1. 程式人生 > >【Java集合原始碼剖析】Java集合框架

【Java集合原始碼剖析】Java集合框架

    Java集合工具包位於Java.util包下,包含了很多常用的資料結構,如陣列、連結串列、棧、佇列、集合、雜湊表等。學習Java集合框架下大致可以分為如下五個部分:List列表、Set集合、Map對映、迭代器(Iterator、Enumeration)、工具類(Arrays、Collections)。

    Java集合類的整體框架如下:

 

    從上圖中可以看出,集合類主要分為兩大類:Collection和Map。

    Collection是List、Set等集合高度抽象出來的介面,它包含了這些集合的基本操作,它主要又分為兩大部分:List和Set。

    List介面通常表示一個列表(陣列、佇列、連結串列、棧等),其中的元素可以重複,常用實現類為ArrayList和LinkedList,另外還有不常用的Vector。另外,LinkedList還是實現了Queue介面,因此也可以作為佇列使用。

    Set介面通常表示一個集合,其中的元素不允許重複(通過hashcode和equals函式保證),常用實現類有HashSet和TreeSet,HashSet是通過Map中的HashMap實現的,而TreeSet是通過Map中的TreeMap實現的。另外,TreeSet還實現了SortedSet介面,因此是有序的集合(集合中的元素要實現Comparable介面,並覆寫Compartor函式才行)。

    我們看到,抽象類AbstractCollection、AbstractList和AbstractSet分別實現了Collection、List和Set介面,這就是在Java集合框架中用的很多的介面卡設計模式,用這些抽象類去實現介面,在抽象類中實現介面中的若干或全部方法,這樣下面的一些類只需直接繼承該抽象類,並實現自己需要的方法即可,而不用實現介面中的全部抽象方法。

    Map是一個對映介面,其中的每個元素都是一個key-value鍵值對,同樣抽象類AbstractMap通過介面卡模式實現了Map介面中的大部分函式,TreeMap、HashMap、WeakHashMap等實現類都通過繼承AbstractMap來實現,另外,不常用的HashTable直接實現了Map介面,它和Vector都是JDK1.0就引入的集合類。

    Iterator是遍歷集合的迭代器(不能遍歷Map,只用來遍歷Collection),Collection的實現類都實現了iterator()函式,它返回一個Iterator物件,用來遍歷集合,ListIterator則專門用來遍歷List。而

Enumeration則是JDK1.0時引入的,作用與Iterator相同,但它的功能比Iterator要少,它只能再Hashtable、Vector和Stack中使用。

    Arrays和Collections是用來運算元組、集合的兩個工具類,例如在ArrayList和Vector中大量呼叫了Arrays.Copyof()方法,而Collections中有很多靜態方法可以返回各集合類的synchronized版本,即執行緒安全的版本,當然了,如果要用執行緒安全的結合類,首選Concurrent併發包下的對應的集合類。

相關推薦

Java集合原始碼剖析Java集合框架

    Java集合工具包位於Java.util包下,包含了很多常用的資料結構,如陣列、連結串列、棧、佇列、集合、雜湊表等。學習Java集合框架下大致可以分為如下五個部分:List列表、Set集合、Ma

Java集合原始碼剖析ArrayList原始碼剖析

本篇博文參加了CSDN博文大賽,如果您覺得這篇博文不錯,希望您能幫我投一票,謝謝!ArrayList簡介    ArrayList是基於陣列實現的,是一個動態陣列,其容量能自動增長,類似於C語言中的動態申請記憶體,動態增長記憶體。    ArrayList不是執行緒安全的,只

Java集合原始碼剖析TreeMap原始碼剖析

前言    本文不打算延續前幾篇的風格(對所有的原始碼加入註釋),因為要理解透TreeMap的所有原始碼,對博主來說,確實需要耗費大量的時間和經歷,目前看來不大可能有這麼多時間的投入,故這裡意在通過於閱讀原始碼對TreeMap有個巨集觀上的把握,並就其中一些方法的實現做比較深

Java集合源代碼剖析Java集合框架

set接口 eset eem jdk1 叠代 array 學習 tail pan 轉載輕註明出處:http://blog.csdn.net/ns_code/article/details/35564663 Java集合工具包位於Java.util包下,包括了非常多

原始碼分析——Java集合之ArrayList

準備寫一個系列分析Java集合的原始碼,總體來說ArrayList原始碼除了個別方法其他都比較簡單,本篇分析ArrayList的原始碼先練練手~ 一、概述和繼承關係     ArrayList是基於動態陣列實現的,也就是說ArrayList中的物件被儲存在一個連續的陣列中

知了堂學習筆記java中常用集合的理解

style out hset 篩選 arraylist list 內容 必備 foreach   最近學習了java中常用集合類的一些知識,在這裏作為一只小白,我來談談我的理解,順帶總結知識點。 引入:在沒有接觸之前,聽到集合,給我感覺是想到了數學中的集合一樣,裏面存放著一

集合詳解Java集合總結(下)-常用集合類對比

今天我們主要看一張圖。 圖是無意中在網上發現的,個人覺得非常好。(時間久了就忘了出處,請原創原諒~~) 我們還是從左到右分析。 ①所有的類都用到Iterator則說明所有的集合類都有遍歷集合的方法。 ②LinkedList除了繼承AbstractSe

集合詳解Java集合總結(中)-Map家族

接上文,本篇部落格我們接著談論有關集合的內容。 java所有的集合分成三大類。Set類似罐子,把一個物件新增到Set集合時,Set集合無法記住新增這個元素的順序,所以Set裡的元素不能重複。List集合非常想一個數組,可以記住每次新增元素的順序,且List的長

Java集合原始碼分析02----Collection集合

目錄   Collection框架綜述 Collection介面 Set介面 List介面 Queue介面 迭代器 -----------參考《Thank In Java》 Collection框架綜述 Collection是一個介面,分為常見的

原始碼分享java如何對接簡訊驗證碼

今天公司提出一個需求,要在現有專案上收集註冊使用者的真實手機號,由於之前沒有接觸過這一塊,只能尋求度孃的幫助,經過一天的努力,終於完成了,現整理記錄下已備查閱。 1 解決方案:在註冊時要求使用者進行手機驗證。 2 尋找簡訊供應商:由於對這一塊不是太懂,大學同學推薦一家他們公司在用的給我。

原始碼分享java實現對接簡訊驗證碼應用功能

今天公司提出一個需求,要在現有專案上收集註冊使用者的真實手機號,由於之前沒有接觸過這一塊,只能尋求度孃的幫助,經過一天的努力,終於完成了,現整理記錄下已備查閱。 1 解決方案:在註冊時要求使用者進行手機驗證。2 尋找簡訊供應商:由於對這一塊不是太懂,大學同學推薦一家他們公司在用的給我。3 程式碼實現 首先到

Java集合原始碼解讀(一):集合總體框架

        集合是Java最常用的核心API之一,這一篇介紹下集合的大致框架。首先看兩張圖。 由上圖可以看出Java集合的大體架構組成: 1. Collection介面:該介面下有兩個子介面Set介面和List介面 2. Map介面 由上圖可以很清楚知道Java集合

MongoDB數據庫Java MongoDB CRUD Example

tps shell ase 命令 server ocl drive users find 上一篇我們講了MongoDB 的命令入門初探,本篇blog將基於上一篇blog所建立的數據庫和表完畢一個簡單的Java MongoDB CRUD Example,利用Java連

知了堂學習筆記java 接口與抽象類

表現 lar images 例子 然而 編寫 targe 無法 abstract 本次主角:抽象類 、接口。 對於皮皮瀟這樣一類的Java初學者來說,接口和抽象類如果不去花大量的精力與時間是很難弄清楚的,而我也是在最近這周的項目學習中感覺到了我對這兩個概念不熟悉,所以導致對

知了堂學習筆記java 編寫幾種常見排序算法

第一個 public 調用 ati print 所有 eth string quick 排序的分類: 一.交換排序 所謂交換,就是根據序列中兩個記錄鍵值的比較結果來對換這兩個記錄在序列中的位置,交換排序的特點是:將鍵值較大的記錄向序列的尾部移動,鍵值較小的記錄向序列的前部

知了堂學習筆記java基礎知識之繼承

內存 關鍵字 保留 new 目的 不同 super() 如何 筆記   繼承的好處 提高代碼的復用性。 讓類與類之間產生了關系,給第三個特征多態提供了前提。(無繼承無多態) Java中支持單繼承,不直接支持多繼承,但對c++中的多繼承機制進行改良。 單繼承:一個子類

面試算法題Java Stack 類的使用

obj har turn cte charat arch 默認 子類 size Java Stack 類棧是Vector的一個子類,它實現了一個標準的後進先出的棧。堆棧只定義了默認構造函數,用來創建一個空棧。 常用方法1 boolean empty() 測試堆棧是否為空

原始碼剖析threadpool —— 基於 pthread 實現的簡單執行緒池

部落格新地址:https://github.com/AngryHacker/articles/issues/1#issue-369867252 執行緒池介紹 執行緒池可以說是專案中經常會用到的元件,在這裡假設讀者都有一定的多執行緒基礎,如果沒有的話不妨在這裡進行了解:POSIX

原始碼剖析MemoryPool —— 簡單高效的記憶體池 allocator 實現

      什麼是記憶體池?什麼是 C++ 的 allocator?       記憶體池簡單說,是為了減少頻繁使用 malloc/free new/delete 等系統呼叫而造成的效能損耗而設計的。當我們的程式需要頻繁地申請和釋放

原始碼剖析Webbench —— 簡潔而優美的壓力測試工具

      Webbench 是一個古老而著名的網站壓力測試工具,簡單而實用。如果你不清楚你的網站能承受多大的壓力,或者你想分析對比兩個網站的效能,webbench 再好用不過了。      Gitbub 地址:點我