前面给大家介绍了集合家族中的Collection家族,这一篇给大家分享的是集合中的另一个家族就是Map家族。以前的时候学习Map的时候没有很认真的去学习,我觉得很多东西还是不是很清楚。
这次我将总结的非常详细。程序员的道理里,我们风雨无阻!
1.1、Map概述
Map 的字面翻译是映射(地图就是一种映射)。将键映射到值的对象,一个映射不能包含重复的键(如果有添加有重复的键,后面的会覆盖掉前面的,但是如果是自定义类型必须重写hashCode()和equals()方法),每个键最多只能映射到一个值。
map是Java中提供的一种通用的元素存储方式,它是一种集合类。map集合类用于存储键值对(“键”、“值”)即Map<key,value>,每个键映射到一个值。但要注意的是:key不能重复。所以通过指定的key就可以取出对应的value。
在JavaSE中,对Map的实现主要包括: HashMap, TreeMap, HashTable 和 LinkedHashMap:
- HashMap 使用哈希表(hash table)实现, 在 keys 和/或 values 之中,都是无序的.
- TreeMap 基于红黑树(red-black tree)数据结构实现, 按 key 排序.
- LinkedHashMap 保持者插入顺序.
- Hashtable 与HashMap实现方式一样,但Hashtable属于同步(synchronized)的.
所以如果代码是线程安全的,那么应该使用HashMap,因为Hashtable的同步是有一定量的运行代价的。而现今对于需要同步的Map,使用 ConcurrentHashMap 也比 Hashtable 有更高的效率。
注:map中的key和value都必须是Object(除非指定了泛型)
1.2、Map接口和Collection接口的不同
Map是双列的,Collection是单列的
Map的键唯一,Collection的子体系Set是唯一的
Map集合的数据结构值针对键有效,跟值无关;Collection集合的数据结构是针对元素有效。
Map集合没有直接取出元素的方法,而是先转成Set集合,在通过迭代获取元素
1.3、Map集合功能概述
添加功能 * V put(K key,V value):添加元素。 * 如果键是第一次存储,就直接存储元素,返回null * 如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
putAll(Map<? extends K,? extends V> m)将指定Map中的键值对复制到Map中 删除功能 * void clear():移除所有的键值对元素 * V remove(Object key):删除指定key所对应的键值对,返回可以所关联的value,如果key不存在,返回null 判断功能 * boolean containsKey(Object key):判断集合是否包含指定的键 * boolean containsValue(Object value):判断集合是否包含指定的值 * boolean isEmpty():判断集合是否为空 获取功能 * Set<Map.Entry<K,V>> entrySet(): * V get(Object key):根据键获取值 * Set<K> keySet():获取集合中所有键的集合 * Collection<V> values():获取集合中所有值的集合 长度功能 * int size():返回集合中的键值对的个数
Map中包含一个内部类:Entry。该类封装了一个键值对,它包含了三个方法:
Object getKey():返回该Entry里包含的key值。
Object getValeu():返回该Entry里包含的value值。
Object setValue(V value):设置该Entry里包含的value值,并返回新设置的value值。
1.4、Map实例之遍历
Map的遍历大体有3种:
第一种:遍历Map.entrySet():它的每一个元素都是Map.Entry对象,这个对象中,放着的就是Map中的某一对key-value。
第二种:遍历Map.keySet():它是Map中key值的集合,我们可以通过遍历这个集合来读取Map中的元素。
第三种:遍历Map.values():它是Map中value的集合,我们可以直接通过这个集合遍历Map中的值,却不能读取key。
1)Map集合的遍历之键找值
思路:一是:获取所有键的集合。二是:遍历键的集合,获取到每一个键。三是:根据键找值。
package com.zyh.Collection.map; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Set; public class MapDemo_0010 { // Map集合的遍历之键找值 public static void main(String[] args) { Map<String,Integer> map = new HashMap<>(); map.put("张三",34); map.put("美女",14); map.put("帅哥",24); map.put("流浪汉",74); /*方式一:使用迭代器 Set<String> str = map.keySet(); Iterator<String> it = str.iterator(); while (it.hasNext()){ String key = it.next(); Integer value = map.get(key); System.out.println("key="+key+"——value="+value); }*/ //方式二:使用增强for循环 for (String key:map.keySet()){ System.out.println("key="+key+"——value="+map.get(key)); } } }