Spring 提供容器功能,容器可以管理對象的生命周期、對象與對象之間的依賴關系,您可以使用壹個配置文件(通常是XML),在上面定義好對象的名稱、如何產生(Prototype 方式或Singleton 方式)、哪個對象產生之後必須設定成為某個對象的屬性等,在啟動容器之後,所有的對象都可以直接取用,不用編寫任何壹行程序代碼來產生對象,或是建立對象與對象之間的依賴關系。
換個更直白點的說明方式:容器是壹個Java 所編寫的程序,原先必須自行編寫程序以管理對象關系,現在容器都會自動幫您作好。
常用容器:WebSphere,WebLogic,Resin,Tomcat
集合類存放於java.util包中。
集合類存放的都是對象的引用,而非對象本身,出於表達上的便利,我們稱集合中的對象就是指集合中對象的引用(reference)。
集合類型主要有3種:set(集)、list(列表)和map(映射)。
(1)集
集(set)是最簡單的壹種集合,它的對象不按特定方式排序,只是簡單的把對象加入集合中,就像往口袋裏放東西。
對集中成員的訪問和操作是通過集中對象的引用進行的,所以集中不能有重復對象。
集也有多種變體,可以實現排序等功能,如TreeSet,它把對象添加到集中的操作將變為按照某種比較規則將其插入到有序的對象序列中。它實現的是SortedSet接口,也就是加入了對象比較的方法。通過對集中的對象叠代,我們可以得到壹個升序的對象集合。
(2)列表
列表的主要特征是其對象以線性方式存儲,沒有特定順序,只有壹個開頭和壹個結尾,當然,它與根本沒有順序的集是不同的。
列表在數據結構中分別表現為:數組和向量、鏈表、堆棧、隊列。
關於實現列表的集合類,是我們日常工作中經常用到的,將在後邊的筆記詳細介紹。
(3)映射
映射與集或列表有明顯區別,映射中每個項都是成對的。映射中存儲的每個對象都有壹個相關的關鍵字(Key)對象,關鍵字決定了對象在映射中的存儲位置,檢索對象時必須提供相應的關鍵字,就像在字典中查單詞壹樣。關鍵字應該是唯壹的。
關鍵字本身並不能決定對象的存儲位置,它需要對過壹種散列(hashing)技術來處理,產生壹個被稱作散列碼(hash code)的整數值,散列碼通常用作壹個偏置量,該偏置量是相對於分配給映射的內存區域起始位置的,由此確定關鍵字/對象對的存儲位置。理想情況下,散列處理應該產生給定範圍內均勻分布的值,而且每個關鍵字應得到不同的散列碼。
集合類簡介
java.util中***有13個類可用於管理集合對象,它們支持集、列表或映射等集合,以下是這些類的簡單介紹
集:
HashSet: 使用HashMap的壹個集的實現。雖然集定義成無序,但必須存在某種方法能相當高效地找到壹個對象。使用壹個HashMap對象實現集的存儲和檢索操作是在固定時間內實現的.
TreeSet: 在集中以升序對對象排序的集的實現。這意味著從壹個TreeSet對象獲得第壹個叠代器將按升序提供對象。TreeSet類使用了壹個TreeMap.
列表:
Vector: 實現壹個類似數組壹樣的表,自動增加容量來容納妳所需的元素。使用下標存儲和檢索對象就象在壹個標準的數組中壹樣。妳也可以用壹個叠代器從壹個Vector中檢索對象。Vector是唯壹的同步容器類?當兩個或多個線程同時訪問時也是性能良好的。
Stack: 這個類從Vector派生而來,並且增加了方法實現棧?壹種後進先出的存儲結構。
LinkedList: 實現壹個鏈表。由這個類定義的鏈表也可以像棧或隊列壹樣被使用。
ArrayList: 實現壹個數組,它的規模可變並且能像鏈表壹樣被訪問。它提供的功能類似Vector類但不同步。
映射:
HashTable: 實現壹個映象,所有的鍵必須非空。為了能高效的工作,定義鍵的類必須實現hashcode()方法和equal()方法。這個類是前面java實現的壹個繼承,並且通常能在實現映象的其他類中更好的使用。
HashMap: 實現壹個映象,允許存儲空對象,而且允許鍵是空(由於鍵必須是唯壹的,當然只能有壹個)。
WeakHashMap: 實現這樣壹個映象:通常如果壹個鍵對壹個對象而言不再被引用,鍵/對象對將被舍棄。這與HashMap形成對照,映象中的鍵維持鍵/對象對的生命周期,盡管使用映象的程序不再有對鍵的引用,並且因此不能檢索對象。
TreeMap: 實現這樣壹個映象,對象是按鍵升序排列的。
Set和List都是由公***接口Collection擴展而來,所以它們都可以使用壹個類型為Collection的變量來引用。這就意味著任何列表或集構成的集合都可以用這種方式引用,只有映射類除外(但也不是完全排除在外,因為可以從映射獲得壹個列表。)所以說,把壹個列表或集傳遞給方法的標準途徑是使用Collection類型的參數。