天天看點

J2SE綜合對java util的總結 一

J2SE綜合對java util的總結 一

java.util包中包含了一些在Java 2中新增加的最令人興奮的增強功能:類集。一個類集(collection)是一組對象。類集的增加使得許多java.util中的成員在結構和體系結構上發生根本的改變。它也擴充了包可以被應用的任務範圍。類集是被所有Java程式員緊密關注的最新型的技術。

除了類集,java.util還包含了支援範圍廣泛的函數的各種各樣的類和接口。這些類和接口被核心的Java包廣泛使用,同時當然也可以被你編寫的程式所使用。對它們的應用包括産生僞随機數,對日期和時間的操作,觀測事件,對位集的操作以及标記字元串。由于java.util具有許多特性,是以它是Java中最被廣泛使用的一個包。

java.util中包含的類如下。

在Java 2中新增加的一些也被列出:

AbstractCollection (Java 2) EventObject Random

AbstractList (Java 2) GregorianCalendar ResourceBundle

AbstractMap (Java 2) HashMap (Java 2) SimpleTimeZone

AbstractSequentialList (Java 2) HashSet (Java 2) Stack

AbstractSet (Java 2) Hashtable StringTokenizer

ArrayList (Java 2) LinkedList (Java 2) Timer (Java 2, v1.3)

Arrays (Java 2) ListResourceBundle TimerTask (Java 2, v1.3)

BitSet Locale TimeZone

Calendar Observable TreeMap (Java 2)

Collections (Java 2) Properties TreeSet (Java 2)

Date PropertyPermission (Java 2) Vector

Dictionary PropertyResourceBundle WeakHashMap (Java 2)

java.util定義了如下的接口。注意其中大多數是在Java 2中新增加的。

Collection (Java 2) List (Java 2) Observer

Comparator (Java 2) ListIterator (Java 2) Set (Java 2)

Enumeration Map (Java 2) SortedMap (Java 2)

EventListener Map.Entry (Java 2) SortedSet (Java 2)

Iterator (Java 2)

ResourceBundle類,ListResourceBundle類和PropertyResourceBundle類幫助具有特定地區資源的大型程式國際化。關于這些類的讨論,在這裡從略。授權對系統屬性進行讀/寫的PropertyPermission類也超過了本書的讨論範圍。EventObject和EventListener類将在第20章讨論。下面将對剩下的類和接口做詳細的讨論。

15.1 類集概述

Java的類集(Collection)架構使你的程式處理對象組的方法标準化。在Java 2出現之前,Java提供了一些專門的類如Dictionary,Vector,Stack和Properties去存儲和操作對象組。盡管這些類非常有用,它們卻缺少一個集中,統一的主題。是以例如說使用Vector的方法就會與使用Properties的方法不同。以前的專門的方法也沒有被設計成易于擴充和能适應新的環境的形式。而類集解決了這些(以及其他的一些)問題。

類集架構被設計用于适應幾個目的。

首先,這種架構是高性能的。對基本類集(動态數組,連結表,樹和散清單)的實作是高效率的。一般很少需要人工去對這些“資料引擎”編寫代碼(如果有的話)。第二點,架構必須允許不同類型的類集以相同的方式和高度互操作方式工作。第三點,類集必須是容易擴充和/或修改的。為了實作這一目标,類集架構被設計成包含一組标準的接口。對這些接口,提供了幾個标準的實作工具(例如LinkedList,HashSet和TreeSet),通常就是這樣使用的。如果你願意的話,也可以實作你自己的類集。

為了友善起見,建立用于各種特殊目的的實作工具。一部分工具可以使你自己的類集實作更加容易。最後,增加了允許将标準數組融合到類集架構中的機制。

算法(Algorithms)是類集機制的另一個重要部分。算法操作類集,它在Collections類中被定義為靜态方法。是以它們可以被所有的類集所利用。每一個類集類不必實作它自己的方案,算法提供了一個處理類集的标準方法。

由類集架構建立的另一項是Iterator接口。一個疊代程式(iterator)提供了一個多用途的,标準化的方法,用于每次通路類集的一個元素。是以疊代程式提供了一種枚舉類集内容(enumerating the contents of a collection)的方法。因為每一個類集都實作Iterator,是以通過由Iterator定義的方法,任一類集類的元素都能被通路到。是以,稍作修改,循環通過集合的程式代碼也可以被用來循環通過清單。

除了類集之外,架構定義了幾個映射接口和類。映射(Maps)存儲鍵/值對。盡管映射在對項的正确使用上不是“類集”,但它們完全用類集內建。在類集架構的語言中,可以獲得映射的類集“視圖”(collection-view)。這個“視圖”包含了從存儲在類集中的映射得到的元素。是以,如果選擇了一個映射,就可以将其當做一個類集來處理。

對于由java.util定義的原始類,類集機制被更新以便它們也能夠內建到新的系統裡。是以了解下面的說法是很重要的:盡管類集的增加改變了許多原始工具類的結構,但它卻不會導緻被抛棄。類集僅僅是提供了處理事情的一個更好的方法。

最後的一點:如果你對C++比較熟悉的話,那麼你可以發現Java的類集技術與在C++中定義的标準模闆庫(STL)相似。在C++中叫做容器(container),而在Java中叫做類集。

15.2 類集接口

類集架構定義了幾個接口。本節對每一個接口都進行了概述。首先讨論類集接口是因為它們決定了collection類的基本特性。不同的是,具體類僅僅是提供了标準接口的不同實作。支援類集的接口總結在如下的表中:

接口描述

Collection 能使你操作對象組,它位于類集層次結構的頂層

List 擴充Collection去處理序列(對象的清單)

Set 擴充Collection去處理集合,集合必須包含唯一進制素

SortedSet 擴充Set去處理排序集合

除了類集接口之外,類集也使用Comparator,Iterator和ListIterator接口。關于這些接口将在本章後面做更深入的描述。簡單地說,Comparator接口定義了兩個對象如何比較;

Iterator和ListIterator接口枚舉類集中的對象。

為了在它們的使用中提供最大的靈活性,類集接口允許對一些方法進行選擇。可選擇的方法使得使用者可以更改類集的内容。支援這些方法的類集被稱為可修改的(modifiable)。不允許修改其内容的類集被稱為不可修改的(unmodifiable)。如果對一個不可修改的類集使用這些方法,将引發一個UnsupportedOperationException異常。所有内置的類集都是可修改的。

下面讨論類集接口。

15.2.1 類集接口

Collection接口是構造類集架構的基礎。它聲明所有類集都将擁有的核心方法。這些方法被總結在表15-1中。因為所有類集實作Collection,是以熟悉它的方法對于清楚地了解架構是必要的。其中幾種方法可能會引發一個UnsupportedOperationException異常。正如上面解釋的那樣,這些發生在當類集不能被修改時。當一個對象與另一個對象不相容,例如當企圖增加一個不相容的對象到一個類集中時。将産生一個ClassCastException異常。表15-1 由Collection 定義的方法

方法描述

boolean add(Object obj) 将obj加入到調用類集中。如果obj被加入到類集中了,則返

回true;如果obj已經是類集中的一個成員或類集不能被複制時,則傳回falseboolean addAll(Collection c) 将c中的所有元素都加入到調用類集中,如果操作成功(也就是說元素被加入了),則傳回true;否則傳回falsevoid clear( ) 從調用類集中删除所有元素boolean contains(Object obj) 如果obj是調用類集的一個元素,則傳回true,否則,傳回falseboolean containsAll(Collection c) 如果調用類集包含了c中的所有元素,則傳回true;否則,傳回falseboolean equals(Object obj) 如果調用類集與obj相等,則傳回true;否則傳回falseint hashCode( ) 傳回調用類集的散列碼boolean isEmpty( ) 如果調用類集是空的,則傳回true;否則傳回falseIterator iterator( ) 傳回調用類集的疊代程式Boolean remove(Object obj) 從調用類集中删除obj的一個執行個體。如果這個元素被删除了,則傳回true;否則傳回falseBoolean removeAll(Collection c) 從調用類集中删除c的所有元素。如果類集被改變了(也就是說元素被删除了),則傳回true;否則傳回falseBoolean retainAll(Collection c) 删除調用類集中除了包含在c中的元素之外的全部元素。如果類集被改變了(也就是說元素被删除了),則傳回true,否則傳回falseint size( ) 傳回調用類集中元素的個數Object[ ] toArray( ) 傳回一個數組,該數組包含了所有存儲在調用類集中的元素。數組元素是類集元素的拷貝Object[ ] toArray(Object array[ ]) 傳回一個數組,該數組僅僅包含了那些類型與數組元素類型比對的類集元素。數組元素是類集元素的拷貝。如果array的大小與比對元素的個數相等,它們被傳回到array.如果array的大小比比對元素的個數小,将配置設定并傳回一個所需大小的新數組,如果array的大小比比對元素的個數大,在數組中,在類集元素之後的單元被置為null.如果任一類集元素的類型都不是array 的子類型, 則引發一個ArrayStoreException異常

調用add( )方法可以将對象加入類集。注意add( )帶一個Object類型的參數。因為Object是所有類的超類,是以任何類型的對象可以被存儲在一個類集中。然而原始類型可能不行。例如,一個類集不能直接存儲類型int,cha參考http://wenku.it168.com/d_000068692.shtml