介紹

幾乎每個程序都需要存儲一些數據集。它可能是字符串和數字、對像等。數組是一種極好的存儲解決方案。但是數組有一定的局限性。例如,它們的大小是固定的,不能移除元素,不能在中間插入元素。創建集合是為了繞過這些和其他限制。所有類型的集合(並且有很多,我們將在本課後面看到)都可以動態調整自身大小。某些集合類型可以存儲有序元素,並在添加新元素時自動將它們排序。

在本課中,我們將熟悉Java 集合框架中基本集合的類層次結構。還有各種替代庫可以擴展標準Java Collections Framework的功能。其中最受歡迎的是Guava(Google 收藏庫)。

*並非所有接口和類都在圖中表示。為了便於理解,省略了一些。

基本接口

該圖顯示有兩個基本接口被實現以形成其餘的類和接口。

讓我們來看看這些接口:

  1. 集合— 包含一組元素(對象)的普通集合。該集合具有處理元素的基本方法:插入( add addAll)、移除( remove removeAll clear)、搜索( contains containsAll)、檢查集合是否為空( isEmpty)和獲取大小(size

  2. Map——一個結構化為鍵值對的集合。此外, Map中的每個鍵都是唯一的:沒有兩個鍵具有相同的值。這個集合有時被稱為字典地圖是一個單獨的界面。它不實現Collection接口,而是Java Collections Framework的一部分。

使用Map中的元素的有用方法:

  • 插入(putAll

  • 得到(得到keySetentrySet

  • 刪除(刪除清除

  • 搜索(包含鍵包含值

  • 檢查集合是否為空(isEmpty

  • 獲取大小(大小

現在讓我們詳細談談它們中的每一個。

收藏界面

Collection接口擴展了Iterable接口,它只有一個方法:iterator()。對我們來說,這意味著任何繼承Iterable的集合都將能夠返回一個迭代器。

迭代是一種特殊對象,可用於訪問任何集合的元素,而不管其具體實現如何。

圖中顯示有3個接口繼承了Collection接口:ListQueueSet。現在我們將簡要地看一下它們中的每一個。

List是一個允許重複值的有序集合。List的一個特點是它的元素被編號並且可以通過數字(索引)訪問。

隊列按照元素添加到隊列的順序存儲元素。

與列表不同,Set表示不允許重複元素的無序集合。Set接口對應於數學集合的概念。

Map接口的實現

我們可以看到Map接口表示唯一鍵和值之間的映射。


interface Map<K, V>

其中K是鍵的類型,V是存儲值的類型。

使用鍵,我們可以從Map中提取數據。要向Map添加元素,我們必須指定一個鍵和一個值。

讓我們看一下Map的一些實現:

  1. HashMap是Map的一種實現,它基於哈希表。它可以存儲任何類型的鍵和值,包括null。不保證元素的順序。

  2. LinkedHashMap是一種將數據存儲為元素鍊錶的數據結構。元素按添加順序出現在列表中。

  3. TreeMap實現了SortedMap接口(通過NavigableMap接口)。此結構中的元素按排序順序存儲(添加新元素時,集合會自動排序)。TreeMap非常適合存儲大量排序數據並具有快速檢索功能。

過時的集合:

Java 有以前版本的過時集合(為了保持向後兼容性)。這些舊集合不應在新代碼中使用:

  • 枚舉——類似於迭代器接口;

  • Vector — 有序的元素列表,類似於ArrayList類;

  • 堆棧— 堆棧數據結構的一種實現,它存儲和操作元素,就像您與一堆書進行交互一樣。有一些方法可以將元素添加到堆棧 ( push ) 和將它們移除 ( pop );

  • Dictionary——類似於Map接口,但它是一個抽像類;

  • Hashtable — 類似於HashMap

您可以在本文中閱讀有關集合框架的更多信息。