我們介紹的都是具體的容器類,上節(jié)我們提到,所有具體容器類其實(shí)都不是從頭構(gòu)建的,它們都繼承了一些抽象容器類。這些抽象類提供了容器接口的部分實(shí)現(xiàn),方便了Java具體容器類的實(shí)現(xiàn),理解它們有助于進(jìn)一步理解具體容器類。
此外,通過(guò)繼承抽象類,自定義的類也可以更為容易的實(shí)現(xiàn)容器接口。為什么需要實(shí)現(xiàn)容器接口呢?至少有兩個(gè)原因:
- 容器類是一個(gè)大家庭,它們之間可以方便的協(xié)作,比如很多方法的參數(shù)和返回值都是容器接口對(duì)象,實(shí)現(xiàn)了容器接口,就可以方便的參與進(jìn)這種協(xié)作。
- Java有一個(gè)類Collections,提供了很多針對(duì)容器接口的通用算法和功能,實(shí)現(xiàn)了容器接口,就可以直接利用Collections中的算法和功能。
那,具體都有哪些抽象類?它們都提供了哪些基礎(chǔ)功能?如何進(jìn)行擴(kuò)展?下面就來(lái)探討這些問(wèn)題。
我們先來(lái)看都有哪些抽象類,以及它們與之前介紹的容器類的關(guān)系。
抽象容器類
抽象容器類與之前介紹的接口和具體容器類的關(guān)系如下圖所示:
虛線框表示接口,有Collection, List, Set, Queue, Deque和Map。
有六個(gè)抽象容器類:
- AbstractCollection: 實(shí)現(xiàn)了Collection接口,被抽象類AbstractList, AbstractSet, AbstractQueue繼承,ArrayDeque也繼承自AbstractCollection (圖中未畫出)。