Map集合简介数组
Map用于保存具备映射关系的数据,所以Map集合里保存着两组值,一组值用于保存Map里的key,另一组用于保存Map里的vlaue,key和value均可以是任何引用类型的数据。对象
Map的key不容许重复,即同一个Map对象的任何两个key经过equals方法比较老是返回false。索引
key和value之间存在单向一对一关系,即经过指定的key,总能找到惟一的、肯定的value。从Map中取出数据时,只要给出指定的key,就能够取出对应的value。接口
若是把Map里的全部key放在一块儿来看,它们就组成了一个set集合(全部的key没有顺序,key与key之间不能重复),实际上Map确实包含了一个keySet()方法,用于返回Map里rem
全部key组成的Set集合。get
Map里key集合Set集合里元素的存储形式也很像,Map子类和Set子类在名字上也惊人地类似,好比Set接口下有HashSet、LinkedHashSet、SortedSet(接口)、TreeSet、EnumSet等子接口和实现类,而Map接口下则有HashMap、LinkedHashMap、SortedMap(接口)、TreeMap、EnumMap等子接口和实现类。源码
Set和Map之间的关系很是密切。虽然Map中放的元素是key-value对,Set集合中放的元素是单个对象,但若是把key-value对中的value当成key的附庸:key在哪里,value就跟在哪里。这样就能够像对待Set同样来对待Map了。事实上,Map提供了一个Entry内部类来封装key-value对,而计算Entry存储时则只考虑Entry封装的key。从Java源码来看,Java是先实现了Map,而后经过包装一个全部value都为null的Map就实现了Set集合。io
若是把Map里的全部value放在一块儿来看,它们又很是相似于一个List:元素与元素之间能够重复,每一个元素能够根据索引来查找,只是Map中的索引再也不使用整数值,而是以另外一个table
对象做为索引。若是须要从List集合中取出元素,则须要提供该元素的数字索引;若是须要从Map中取出元素,则须要提供该元素的key索引。所以,Map有时也被称为字典,或关联数组。Map接口中定义了以下经常使用的方法。List
void clear():删除该Map对象中的全部key-value对。
boolean containsKey(Object key):查询Map中是否包含指定的key,若是包含则返回true。
boolean containsValue(Object value):查询Map中是否包含一个或者多个value,若是包含则返回true。
Set entrySet():返回Map中包含的key-value对所组成的Set集合,每一个集合元素都是Map.Entry(Entry是Map的内部类)对象。
Object get(Object key):返回指定key所对应的value;若是此Map中不包含该key,则返回null。
Boolean isEmpty():查询该Map是否为空(即不包含任何key-value对),若是为空则返回true。
Set keySet():返回该Map中全部key组成的Set集合。
Object put(Object key,Object value):添加一个key-value对,若是当前Map中已有一个与该key相等的key-value对,则新的key-value对会覆盖原来的key-value对。
void putAll(Map m):将指定Map中的key-value对复制本Map中。
Object remove(Object key):删除指定key所对应的key-value对,返回被删除key所关联的value,若是该key不存在,则返回null。
boolean remove(Object key,Object value):这是Java8新增的方法,删除指定key、value所对应的key-value对。若是从该Map中成功地删除该key-value对,该方法返回true,不然返回false。
int size():返回该Map里的key-value对的个数。
Collection values():返回该Map里全部value组成的Collection。
Map接口提供了大量的实现类,典型实现如HashMap和Hashtable等、HashMap的子类LinkedHashMap,还有SortedMap子接口及该接口的实现类TreeMap,以及WeakHashMap、IdentiHashMap等。下面将详细介绍Map接口实现类。
Map中包括一个内部类Entry,该类封装了一个key-value对。Entry包含以下三个方法。
Object getKey():返回该Entry里包含的key值。
Object getValue():返回该Entry里包含的value值。
Object setValue(V value):设置该Entry里包含的value值,并返回新设置的value值。
Map集合最典型的用法就是成对添加、删除key-value对,接下来便可判断该Map中是否包含指定key,是否包含指定value,也能够经过Map提供的keySet()方法
获取全部key组成的集合,进而遍历Map中全部的key-value对。