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類也超過了本書的討論範圍。EventObjectEventListener類將在第20章討論。下面將對剩下的類和接口做詳細的討論。

15.1
類集概述

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

類集框架被設計用於適應幾個目的。

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

爲了方便起見,創建用於各種特殊目的的實現工具。一部分工具可以使你自己的類集實現更加容易。最後,增加了允許將標準數組融合到類集框架中的機制。

算法(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去處理排序集合

除了類集接口之外,類集也使用ComparatorIteratorListIterator接口。關於這些接口將在本章後面做更深入的描述。簡單地說,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 addAllCollection c c中的所有元素都加入到調用類集中,如果操作成功(也就是說元素被加入了),則返回true;否則返回falsevoid clear 從調用類集中刪除所有元素boolean containsObject obj 如果obj是調用類集的一個元素,則返回true,否則,返回falseboolean containsAllCollection c 如果調用類集包含了c中的所有元素,則返回true;否則,返回falseboolean equalsObject obj 如果調用類集與obj相等,則返回true;否則返回falseint hashCode 返回調用類集的散列碼boolean isEmpty 如果調用類集是空的,則返回true;否則返回falseIterator iterator 返回調用類集的迭代程序Boolean removeObject obj 從調用類集中刪除obj的一個實例。如果這個元素被刪除了,則返回true;否則返回falseBoolean removeAllCollection c 從調用類集中刪除c的所有元素。如果類集被改變了(也就是說元素被刪除了),則返回true;否則返回falseBoolean retainAllCollection c 刪除調用類集中除了包含在c中的元素之外的全部元素。如果類集被改變了(也就是說元素被刪除了),則返回true,否則返回falseint size 返回調用類集中元素的個數Object[ ] toArray 返回一個數組,該數組包含了所有存儲在調用類集中的元素。數組元素是類集元素的拷貝Object[ ] toArrayObject array[ ] 返回一個數組,該數組僅僅包含了那些類型與數組元素類型匹配的類集元素。數組元素是類集元素的拷貝。如果array的大小與匹配元素的個數相等,它們被返回到array.如果array的大小比匹配元素的個數小,將分配並返回一個所需大小的新數組,如果array的大小比匹配元素的個數大,在數組中,在類集元素之後的單元被置爲null.如果任一類集元素的類型都不是array 的子類型, 則引發一個ArrayStoreException異常

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章