![]() |
VOOZH | about |
在編寫程序的過程中,使用到集合類,要根據不同的需求,來決定使用哪種集合類,比如,要經常遍歷集合內元素,就要使用List,如果要保證集合中不存在重複的數據,就要用Set;如果要通過某一鍵來查找某一值,就要使用Map。
1)、列表 List接口(繼承於Collection接口)及其實現類
List接口及其實現類是容量可變的列表,可按索引訪問集合中的元素。
特點:集合中的元素有序、可重複;
列表在數據結構中分別表現為:數組和向量、鍊表、堆棧、隊列。
實現類:
ArrayList
實現一個數組,它的規模可變並且能像鍊表一樣被訪問。它提供的功能類似Vector類但不同步,它是以Array方式實現的List,允許快速隨機存取。
LinkedList實現一個鍊表,提供最佳順序存取,適合插入和移除元素。由這個類定義的鍊表也可以像棧或隊列一樣被使用。提供最佳順序存取,適合插入和移除元素。
2)、集 Set接口(繼承於Collection接口)及其實現類
特點:集合中的元素不按特定方式排序,只是簡單的把對象加入集合中,就像往口袋裡放東西。
對Set中成員的訪問和操作是通過Set中對象的引用進行的,所以集中不能有重複對象。
Set也有多種變體,可以實現排序等功能,如TreeSet,它把對象添加到集中的操作將變為按照某種比較規則將其插入到有序的對象序列中。 它實現的是SortedSet接口,也就是加入了對象比較的方法。通過對集中的對象疊代,我們可以得到一個升序的對象集合。
實現類:
HashSet 能夠快速定位一個元素,要注意的是:存入HashSet中的對象必須實現HashCode方法;
TreeSet 將放入其中的元素按序存放。
3)、映射 Map接口及其實現類
Map是一個單獨的接口,不繼承於Collection。Map是一種把鍵對象和值對象進行關聯的容器。
特點:key不允許重複。
映射與集或列表有明顯區別,映射中每個項都是成對的,Map是把鍵對象和值對象進行關聯的容器。映射中存儲的每個對象都有一個相關的關鍵字(Key)對象,關鍵字決定了對象在映射中的存儲位置,檢索對象時必須提供相應的關鍵字,就像在字典中查單詞一樣。關鍵字應該是唯一的,也就是說Map中的鍵對象不允許重複,這是為了保證查詢結果的一致性。
關鍵字本身並不能決定對象的存儲位置,它需要對過一種散列(hashing)技術來處理,產生一個被稱作散列碼(hash code)的整數值,散列碼通常用作一個偏置量,該偏置量是相對於分配給映射的內存區域起始位置的,由此確定關鍵字/對象對的存儲位置。理想情況下,散列處理應該產生給定範圍內均勻分布的值,而且每個關鍵字應得到不同的散列碼。
實現類:
HashMap 實現一個鍵到值映射的哈希表,通過鍵取得值對象,沒有順序,通過get(key)來獲取value,允許存儲空對象,而且允許
在編寫程序的過程中,使用到集合類,要根據不同的需求,來決定使用哪種集合類,比如,要經常遍歷集合內元素,就要使用List,如果要保證集合中不存在重複的數據,就要用Set;如果要通過某一鍵來查找某一值,就要使用Map。
HashTable 實現一個映象,所有的鍵必須非空。為了能高效的工作,定義鍵的類必須實現hashcode方法和equal方法。這個類是前面java實現的一個繼承,並且通常能在實現映象的其他類中更好的使用。
當元素的順序很重要時選用TreeMap,當元素不必以特定的順序進行存儲時,使用HashMap。Hashtable的使用不被推薦,因為HashMap提供了所有類似的功能,並且速度更快。當你需要在多線程環境下使用時,HashMap也可以轉換為同步的。
Properties 一般是把屬性文件讀入流中後,以鍵-值對的形式進行保存,以方便讀取其中的數據。
4)、Iterator接口
Iterator接口位於java.util包中,它是一個對集合進行疊代的疊代器。
集合容器(如:List、Set、Map等)本身提供了處理元素置入和取出的方式,但是單一選取元素的方法很受限制。所以我們要用Iterator去選取容器中的元素,它將容器轉換成一個序列。
Iterator iter=Object.iterator;
while(iter.hasNext){ }