Map接口
Map接口儲存一組成對的鍵-值對象,提供key(鍵)到value(值)的映射,Map中的key不要求有序,不允許重複。value同樣不要求有序,但可以重複 。
Entry =Key-Value (鍵值對)
Map接口中鍵和值一一映射. 可以通過鍵來獲取值
1.Map集合裏保存着兩組值:
一組用於保存Map裏的key
一組用於保存Map裏的value
2.key和value可是任何引用類型的數據,key和value都可以爲null
3.key不允許重複,即同一個Map對象的任何兩個key通過equals方法比較總是返回false
4.key和value之間存在單向一對一關係,即通過指定的key,總能找到唯一的、確定的value
5.所有的key放在一起來看,它們就組成了一個Set集合(無序、不重複),Map提供了一個keySet()方法用於返回Map所有key組成的Set集合
Map中包括一個內部類:Entry
Entry類封裝了一個key-value對象,Entry包含三個方法
我們可以把Map理解成一個特殊的Set,只該Set裏包含的集合元素是Entry對象,而不是普通的對象,在Map集合中使用 entrySet方法返回一個Entry對象集合
Hashhap
HashMap實現了Map接口,繼承AbstractMap,它是基於哈希表的 Map 接口的實現(保證鍵的唯一性),
以key-value的形式存在
初始容量:表示哈希表中桶的數量,初始容量是創建哈希表時的容量,就是集合的容量
加載因子:哈希表在其容量自動增加之前可以達到多滿的一種尺度,它衡量的是一個散列表的空間的使用程度,負載因子越大表示散列表的裝填程度越高,反之愈小。
HashMap
HashMap是引用數據類型
通過 new 關鍵字在 Heap 堆中申請空間
保存其中元素的空間,按照hash碼,預設好一個個的空間
這個空間就是 HashBucket(哈希桶)
每個桶有自己的Hash編號
例子:
public staticvoid main(String args[]){
Map<String,String> maps = newHashMap<String,String>();
maps.put("A", "蘇州");
maps.put("B", "南京");
maps.put("C", "無錫");
for(Map.Entry<String, String>entry:maps.entrySet()){
System.out.println(entry.getKey()+"=====>"+entry.getValue());
}
}
Map集合的遍歷:
1、通過內部類Entry進行遍歷
2、通過迭代器進行遍歷,先獲得Entry的Set集合
3、通過keySet方法獲得鍵的Set集合,通過遍歷鍵取值
4、通過map.values()獲得所有值,但是不能獲得鍵
Hashtable:是Map接口的另外一個實現類,和HashMap用法類似,亦有區別
Ø Hashtable出現於JDK1.0,HashTable基於Dictionary類(建議學生課下研究Dictionary,擴大知識面)
Ø HashMap可以允許存在一個爲null的key和任意個爲null的value,但是HashTable中的key和value都不允許爲null
Ø Hashtable的方法是同步的,而HashMap的方法不是
public static void main(String args[]){
Hashtable<String,Object> table = new Hashtable<String, Object>();
//添加元素
table.put("A", "中國");
table.put("B", "美國");
table.put("C", "俄羅斯");
for(Map.Entry<String,Object> entry:table.entrySet()){
System.out.println(entry.getKey()+"------------->"+entry.getValue());
}
System.out.println("====================================");
//通過Enumeration來遍歷Hashtable
Enumeration<String> enu =table.keys();
while(enu.hasMoreElements()){
String key =enu.nextElement();
System.out.println("Enumeration:"+table.keys()+"===>"+key+"====>"+table.get(key));
} }
Ø TreeMap 是一個有序的key-value集合,它是通過紅黑樹實現的
Ø TreeMap 繼承於AbstractMap,所以它是一個Map,即一個key-value集合
Ø TreeMap 實現了NavigableMap接口,意味着它支持一系列的導航方法,比如返回有序的key集合
Ø TreeMap 實現了Cloneable接口,意味着它能被克隆
Ø TreeMap 實現了Java.io.Serializable接口,意味着它支持序列化