我們介紹的都是具體的容器類,上節(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è)抽象容器類: