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接口,意味着它支持序列化