1 什么是Map集合
类似于IP地址与主机名,身份证号与个人等,这种一一对应的关系,就叫做映射。Java中专门用来存储这种有映射关系的元素的集合叫做Map集合。
1.1 与Collection的区别
1.Collection集合中元素都是单个的,而Map集合中元素成对出现,且有映射关系(由键可找值)。
2.Collection集合叫单列集合,Map集合叫双列集合。
3.Map集合中键不可以重复,而值可以重复。
4.Map集合中键和值得类型可以不同。
2 Map常用子类
Map接口常用的子类有:
HashMap<K,V>:内部采用哈希表结构,元素存取无序。
LinkedHashMap<K,V>:内部采用哈希表+链表的结构,链表保证元素存取的有序。
注意事项:存储自定义类型的时候,需重写hashCode方法和equals方法。
3 Map集合常用方法
public V put(K key, V value);//把指定的键与指定的值添加到Map集合中。
public V remove(Object key);//把指定的键 所对应的键值对元素 在Map集合中删除,返回被删除元素的值。
public V get(Object key);//根据指定的键,在Map集合中获取对应的值。
boolean containsKey(Object key);//判断集合中是否包含指定的键。
public Set<K> keySet();//获取Map集合中所有的键,存储到Set集合中。
public Set<Map.Entry<K,V>> entrySet(); //获取到Map集合中所有的键值对对象的集合(Set集合)。
注意事项:put方法放入元素时,如果原集合中没有指定的键,则返回的值为null,如果有对应的键,则新的值替换原来的值,返回被替换的值。
4 Map集合的遍历
遍历Map集合有两种方式,分别对应Map集合中的两种方法——keySet方法和entrySet方法。
4.1 按键找值的方式
步骤:
1.将Map集合中的所有的键放入一个Set集合中。
2.用遍历Set集合的方法,获取每一个键。
3.依次用Map集合中的get方法用键获取值,达到遍历。
代码演示:
//假设这是个有多个元素的HashMap集合map
Set<String> keys = map.keySet();
// 遍历键集 得到 每一个键
for (String key : keys) {
//key 就是键
//获取对应值
String value = map.get(key);
System.out.println(key+"->"+value);
}
4.2 按键值对的方式
先来了解一下什么叫键值对:
键值对:Map存放得键(K)与值(V)优有着一一对应的关系,这样的一对元素叫键值对。
键值对对象(Entry):Entey将键值对封装成了一个对象,即键值对对象。
Entry也提供了获取键与值的方法:
public K getKey();//获取Entry对象中的键。
public V getValue();//获取Entry对象中的值。
步骤:
1.利用Map集合中的entrySet方法将Map集合中的所有键值对放入Set集合中返回。
2.遍历Set集合,获取每一个entry对象。
3.依次用entry的getKey或者getValue方法,达到遍历的目的。
代码演示:
//假设map是个有元素的HashMap集合
Set<Entry<String,String>> entrySet = map.entrySet();
// 遍历得到每一个entry对象
for (Entry<String, String> entry : entrySet) {
// 解析
String key = entry.getKey();
String value = entry.getValue();
System.out.println(key+"->"+value);
}
5 Map集合存储自定义类型
因为Map集合的键是唯一的,如果有自定义类型是键的话,为了保证键的唯一,则自定义类必须重写hashCode方法和equals方法,来保证自定义类型的唯一。如果想存取有序,则可以使用LinkedHashMap集合。