介紹
幾乎每個程序都需要存儲一些數據集。它可能是字符串和數字、對像等。數組是一種極好的存儲解決方案。但是數組有一定的局限性。例如,它們的大小是固定的,不能移除元素,不能在中間插入元素。創建集合是為了繞過這些和其他限制。所有類型的集合(並且有很多,我們將在本課後面看到)都可以動態調整自身大小。某些集合類型可以存儲有序元素,並在添加新元素時自動將它們排序。
在本課中,我們將熟悉Java 集合框架中基本集合的類層次結構。還有各種替代庫可以擴展標準Java Collections Framework的功能。其中最受歡迎的是Guava(Google 收藏庫)。
基本接口
該圖顯示有兩個基本接口被實現以形成其餘的類和接口。
讓我們來看看這些接口:
-
集合— 包含一組元素(對象)的普通集合。該集合具有處理元素的基本方法:插入( add、 addAll)、移除( remove、 removeAll、 clear)、搜索( contains、 containsAll)、檢查集合是否為空( isEmpty)和獲取大小(size)。
-
Map——一個結構化為鍵值對的集合。此外, Map中的每個鍵都是唯一的:沒有兩個鍵具有相同的值。這個集合有時被稱為字典。地圖是一個單獨的界面。它不實現Collection接口,而是Java Collections Framework的一部分。
使用Map中的元素的有用方法:
-
插入(放,putAll)
-
得到(得到,keySet,值,entrySet)
-
刪除(刪除,清除)
-
搜索(包含鍵,包含值)
-
檢查集合是否為空(isEmpty)
-
獲取大小(大小)
現在讓我們詳細談談它們中的每一個。
收藏界面
Collection接口擴展了Iterable接口,它只有一個方法:iterator()。對我們來說,這意味著任何繼承Iterable的集合都將能夠返回一個迭代器。
迭代器是一種特殊對象,可用於訪問任何集合的元素,而不管其具體實現如何。
圖中顯示有3個接口繼承了Collection接口:List、Queue和Set。現在我們將簡要地看一下它們中的每一個。
List是一個允許重複值的有序集合。List的一個特點是它的元素被編號並且可以通過數字(索引)訪問。
隊列按照元素添加到隊列的順序存儲元素。
與列表不同,Set表示不允許重複元素的無序集合。Set接口對應於數學集合的概念。
Map接口的實現
我們可以看到Map接口表示唯一鍵和值之間的映射。
interface Map<K, V>
其中K是鍵的類型,V是存儲值的類型。
使用鍵,我們可以從Map中提取數據。要向Map添加元素,我們必須指定一個鍵和一個值。
讓我們看一下Map的一些實現:
-
HashMap是Map的一種實現,它基於哈希表。它可以存儲任何類型的鍵和值,包括null。不保證元素的順序。
-
LinkedHashMap是一種將數據存儲為元素鍊錶的數據結構。元素按添加順序出現在列表中。
-
TreeMap實現了SortedMap接口(通過NavigableMap接口)。此結構中的元素按排序順序存儲(添加新元素時,集合會自動排序)。TreeMap非常適合存儲大量排序數據並具有快速檢索功能。
過時的集合:
Java 有以前版本的過時集合(為了保持向後兼容性)。這些舊集合不應在新代碼中使用:
-
枚舉——類似於迭代器接口;
-
Vector — 有序的元素列表,類似於ArrayList類;
-
堆棧— 堆棧數據結構的一種實現,它存儲和操作元素,就像您與一堆書進行交互一樣。有一些方法可以將元素添加到堆棧 ( push ) 和將它們移除 ( pop );
-
Dictionary——類似於Map接口,但它是一個抽像類;
-
Hashtable — 類似於HashMap。
您可以在本文中閱讀有關集合框架的更多信息。
GO TO FULL VERSION