鍍金池/ 教程/ Java/ Java 集合
Java 接口
Java 方法
Java 數(shù)字
Java 條件判斷
Java 異常處理
Java 字符
Java 重寫(xiě)
Java 網(wǎng)絡(luò)編程
Java 數(shù)據(jù)結(jié)構(gòu)
Java 的對(duì)象和類
Java 多線程
Java 封裝
Java 數(shù)組
Java Applet 基礎(chǔ)
Java 庫(kù)類
Java 抽象
Java 繼承
Java 正則表達(dá)式
Java 描述符的類型
Java 發(fā)送郵件
Java 序列化
Java 泛型
Java 多態(tài)
Java 變量類型
Java 基本數(shù)據(jù)類型
Java 包
Java 快速參考指南
Java 基本運(yùn)算符
Java 概述
Java 字符串
Java 循環(huán)控制
Java 環(huán)境設(shè)置
Java 文件注釋
Java 文件和 I/O
Java 集合
Java 基本語(yǔ)法
Java 日期和時(shí)間

Java 集合

Java 2 之前,Java 為對(duì)象組的存儲(chǔ)和操作提供了特別的類比如 字典,向量,堆棧和屬性。盡管這些類確實(shí)有用,它們?nèi)鄙僖粋€(gè)中心的,統(tǒng)一的主題。因此,你使用向量的方法和你使用屬性的方法是不同的。

集合框架被設(shè)計(jì)來(lái)滿足幾個(gè)目標(biāo)

  • 框架需要是高性能的。基礎(chǔ)集合(動(dòng)態(tài)數(shù)組,鏈表,數(shù)和哈希表)是高效的。
  • 框架需要允許不同的集合類型以類似的方式和高度的互操作性工作。
  • 擴(kuò)展或者調(diào)整集合必須是簡(jiǎn)單的。

為此,整個(gè)集合框架被設(shè)計(jì)圍繞一系列的標(biāo)準(zhǔn)接口。幾個(gè)接口的標(biāo)準(zhǔn)實(shí)現(xiàn)例如 LinkedList, HashSet 和 TreeSet 被提供,如果你選擇的話,你可以使用,你也可以實(shí)現(xiàn)你自己的集合。

一個(gè)集合框架是一個(gè)統(tǒng)一的體系結(jié)構(gòu)表示和操作集合。所有的集合框架包含以下:

  • 接口: 這些是代表集合的抽象數(shù)據(jù)類型。接口允許集合獨(dú)立操作它們表示的細(xì)節(jié)。在面向?qū)ο蟮恼Z(yǔ)言中,接口通常形成一個(gè)層次結(jié)構(gòu)。
  • 實(shí)現(xiàn),即類: 這些是集合接口的具體實(shí)施。從本質(zhì)上說(shuō),它們是可重用的數(shù)據(jù)結(jié)構(gòu)。
  • 算法: 這些是在實(shí)現(xiàn)集合接口的對(duì)象上進(jìn)行有用計(jì)算的方法,比如搜索和排序。算法被稱為多態(tài)的,那就是說(shuō),同一個(gè)方法能被用在許多不同的合適的集合接口的實(shí)現(xiàn)上。

除了集合,框架定義了幾個(gè) map 接口和類 Maps 存儲(chǔ)鍵值對(duì)。盡管 maps 不是正確使用集合的術(shù)語(yǔ),但是他們完全由集合整合起來(lái)。

Collection 接口

集合框架定義了幾個(gè)接口。如下提供了每個(gè)接口的概覽:

SN 接口描述
1 Collection 接口
這讓你可以使用對(duì)象組;它是集合層次階段的頂端
2 List 接口
它繼承了 Collection 并且 List 的一個(gè)實(shí)例存儲(chǔ)了元素的一個(gè)有序集合
3 Set
它繼承了 Collection 來(lái)處理集,它必須含有特殊的元素
4 SortedSet
它繼承了 Set 來(lái)處理 排序的 set
5 Map
它將獨(dú)特的鍵和值匹配
6 Map Entry
這描述了映射中的一個(gè)元素(一個(gè)鍵值對(duì))。它是 Map 的一個(gè)內(nèi)部類。
7 SortedMap
它繼承了 Map 因此鍵按升序保持
8 Enumeration
它是舊有的接口并定義了你可以在對(duì)象的集合中列舉(一次獲得一個(gè))元素的方法。這個(gè)舊有的接口被迭代器取代了。

Collection 類

Java 提供了一系列的實(shí)現(xiàn)集合接口的標(biāo)準(zhǔn)集合類。一些類提供了完全的能被直接使用的實(shí)現(xiàn),其他就是抽象類,提供的被用來(lái)作為創(chuàng)建具體集合的實(shí)現(xiàn)。

標(biāo)準(zhǔn)的 collection 類在下面的表格中被概括:

SN 類描述
1 AbstractCollection
實(shí)現(xiàn)大部分的 Collection 接口
2 AbstractList
繼承 AbstractCollection 并且實(shí)現(xiàn)大部分 List 接口
3 AbstractSequentialList
通過(guò)一個(gè)使用有序的而不是隨機(jī)訪問(wèn)它的元素的集合繼承 AbstractList
4 LinkedList
通過(guò)繼承 AbstractSequentialList 實(shí)現(xiàn)一個(gè)鏈表
5 ArrayList
通過(guò)繼承 AbstractList 實(shí)現(xiàn)一個(gè)動(dòng)態(tài)數(shù)組
6 AbstractSet
繼承 AbstractCollection 并實(shí)現(xiàn)大部分的 Set 接口
7 HashSet
用一個(gè)哈希表繼承 AbstractSet
8 LinkedHashSet
繼承 HashSet 來(lái)允許插入順序迭代
9 TreeSet
實(shí)現(xiàn)在樹(shù)中存儲(chǔ)的一個(gè)集。繼承 AbstractSet
10 AbstractMap
實(shí)現(xiàn)大部分的 Map 接口
11 HashMap
用一個(gè)哈希表繼承 AbstractMap
12 TreeMap
用一棵樹(shù)繼承 AbstractMap
13 WeakHashMap
用一個(gè)使用弱鍵的哈希表來(lái)繼承 AbstractMap
14 LinkedHashMap
繼承 AbstractMap 來(lái)允許插入順序迭代
15 IdentityHashMap
繼承 AbstractMap 類并且當(dāng)比較文檔時(shí)平等使用參考

AbstractCollection, AbstractSet, AbstractList, AbstractSequentialList 和 AbstractMap 類提供了核心集合接口的實(shí)現(xiàn),盡量減少努力來(lái)實(shí)現(xiàn)它們。

以下的由 java.util 定義的舊有的類在前面的指南中已經(jīng)被討論過(guò):

SN 類描述
1 Vector
這實(shí)現(xiàn)一個(gè)動(dòng)態(tài)數(shù)組。它和 ArrayList 類似,但也有一些不同。
2 Stack
Stack 是 Vector 的實(shí)現(xiàn)標(biāo)準(zhǔn)的后進(jìn)先出棧的子類
3 Dictionary Dictionary
是一個(gè)抽象的代表一個(gè)鍵值對(duì)存儲(chǔ)庫(kù)的類并且操作起來(lái)非常像 Map
4 Hashtable
Hashtable 是初始的 java.util 的一部分并且是 Dictionary 的具體實(shí)現(xiàn)
5 Properties
Properties 是 Hashtable 的一個(gè)子類。它被用來(lái)保持鍵是一個(gè)字符串并且值也是一個(gè)字符串的值的列表
6 BitSet
一個(gè) BitSet 類創(chuàng)建一個(gè)特殊的保持 bit 數(shù)值的數(shù)組類型。這個(gè)數(shù)組的大小能根據(jù)需要增長(zhǎng)

Collection 算法

集合框架定義了幾個(gè)能被應(yīng)用到 collections 和 maps 的算法。這些算法在 Collection 類的內(nèi)部被定義為靜態(tài)方法。

幾個(gè)方法能拋出異常 ClassCastException,它發(fā)生在想要比較不兼容的類型時(shí);或者異常UnsupportedOperationException,它發(fā)生在想要修改一個(gè)不能修改的集合時(shí)。

集合定義了三個(gè)靜態(tài)變量:EMPTY_SET, EMPTY_LIST, 和 EMPTY_MAP。所有都是不變的。

SN 算法描述
1 The Collection Algorithms
這是所有算法實(shí)現(xiàn)的列表

如何使用 Iterator

通常,你想要在集合中循環(huán)元素。比如,你可能想要顯示每個(gè)元素。

這么做最簡(jiǎn)單的方法是使用 Iterator,它是一個(gè)實(shí)現(xiàn)或者是 Iterator 或者 ListIterator 接口的對(duì)象。

Iterator 讓你可以通過(guò)一個(gè)集合循環(huán),獲得或者除去元素。ListIterator 繼承了 Iterator 來(lái)允許一個(gè)列表的雙向遍歷和元素的修改。

SN Iterator 方法描述
1 使用 Java Iterator
這是所有由 Iterator 和 ListIterator 接口提供的有例子的方法的列表。

如何使用 Comparator

TreeSet 和 TreeMap 都以順序保存元素。然而,是 Comparator 精確定義排序意味著什么。

這個(gè)接口讓我們將一個(gè)給定的集合用不同數(shù)量的方法排序。這個(gè)接口也能被用來(lái)排列任何類的任何實(shí)例(甚至是我們不能修改的類)。

SN Iterator 方法描述
1 使用 Java Comparator
這是所有由 Comparator 接口提供的有例子的方法的列表。

總結(jié)

Java 集合框架給了程序員打包數(shù)據(jù)結(jié)構(gòu)和操作它們的算法的入口。

一個(gè)集合是一個(gè)能對(duì)其他對(duì)象引用的對(duì)象。collection 接口聲明了能在每一個(gè)集合類型上操作的操作。

集合框架的類和接口都在 java.util 包內(nèi)。

上一篇:Java 文件和 I/O下一篇:Java 包