1:Collection和Map接口的幾個主要繼承和實現類
? ? ? ? ? ? ? ??
?
1.1 ?Collection接口
Collection是最基本的集合接口,一個Collection代表一組Object,即Collection的元素(Elements)。一些Collection允許相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接繼承自Collection的類,Java SDK提供的類都是繼承自Collection的“子接口”如List和Set。
如何遍歷Collection中的每一個元素?不論Collection的實際類型如何,它都支持一個iterator()的方法,該方法返回一個迭代子,使用該迭代子即可逐一訪問Collection中每一個元素。典型的用法如下:
Iterator it = collection.iterator(); // 獲得一個迭代子
while(it.hasNext()) {
Object obj = it.next(); // 得到下一個元素
}
1.1.1?Iterator 接口
Iterator接口也是Java集合框架的成員,但它與Collection系列、Map系列的集合不一樣:Collection系列集合、Map系列集合主要用于盛裝其他對象,而Iterator則主要用于遍歷(即迭代訪問)Collection集合中的元素,Iterator對象也被稱為迭代器。
?2 Map接口
Map是一個單獨的接口,不繼承于Collection。Map是一種把鍵對象和值對象進行關聯的容器。一個key->value的對象
特點:key不允許重復。?
?? ? ? ?映射與集或列表有明顯區別,映射中每個項都是成對的,Map是把鍵對象和值對象進行關聯的容器。映射中存儲的每個對象都有一個相關的關鍵字(Key)對象,關鍵字決定了對象在映射中的存儲位置,檢索對象時必須提供相應的關鍵字,就像在字典中查單詞一樣。關鍵字應該是唯一的,也就是說Map中的鍵對象不允許重復,這是為了保證查詢結果的一致性。
關鍵字本身并不能決定對象的存儲位置,它需要對過一種散列(hashing)技術來處理,產生一個被稱作散列碼(hash code)的整數值,散列碼通常用作一個偏置量,該偏置量是相對于分配給映射的內存區域起始位置的,由此確定關鍵字/對象對的存儲位置。理想情況下,散列處理應該產生給定范圍內均勻分布的值,而且每個關鍵字應得到不同的散列碼。
實現類:?
????HashMap?實現一個鍵到值映射的哈希表,通過鍵取得值對象,沒有順序,通過get(key)來獲取value,允許存儲空對象,而且允許鍵是空(由于鍵必須是唯一的,當然只能有一個);?
?? ?HashTable?實現一個映象,所有的鍵必須非空。為了能高效的工作,定義鍵的類必須實現hashcode()方法和equal()方法。這個類是前面java實現的一個繼承,并且通常能在實現映象的其他類中更好的使用。
?? ?當元素的順序很重要時選用TreeMap,當元素不必以特定的順序進行存儲時,使用HashMap。Hashtable的使用不被推薦,因為HashMap提供了所有類似的功能,并且速度更快。當你需要在多線程環境下使用時,HashMap也可以轉換為同步的。
2.1?Map.Entry
Map是java中的接口,Map.Entry是Map的一個內部接口。
Map提供了一些常用方法,如keySet()、entrySet()等方法。
keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一個Set集合,此集合的類型為Map.Entry。
Map.Entry是Map聲明的一個內部接口,此接口為泛型,定義為Entry<K,V>。它表示Map中的一個實體(一個key-value對)。接口中有getKey(),getValue方法。
public class MapTest {public static void main(String[] args) {Map<String,String> map = null;map = new HashMap<String,String>();map.put("name", "小明");map.put("age", "18");map.put("heigh", "175");// 遍歷Map的方法1Set<Map.Entry<String,String>> set1 = map.entrySet();Iterator<Entry<String, String>> iterator = set1.iterator(); while( iterator.hasNext()) {Entry<String, String> entry = iterator.next();Object key = entry.getKey();System.out.println(key);}// 遍歷Map的方法2Set<String> set2 = map.keySet();Iterator<String> iterator1 = set2.iterator();while(iterator1.hasNext()) {Object key = iterator1.next();Object value = map.get(key);System.out.println("key=" + key +" " + "value= " + value);}// 遍歷Map中value的值Collection<String> c = map.values();Iterator<String> iterator3 = c.iterator();while(iterator3.hasNext()) {Object value = iterator3.next(); System.out.println(value);}}}