Map是一种按照键值对(key-value)的形式进行数据存储的数据结构,描述的是一种映射关系。键(key)即所存放数据的编号,值(value)即键所对应的值对象。键值具有唯一性,每个键只能映射一个值对象,同时键不允许重复。
常用的方法:
(1) size() :获取Map尺寸,即Map所包含的key-value对总数;
(2) put(object key,object value):向Map中添加数据元素;
(3) remove(object key):根据键key删除所对应的值对象value,并返回被删除的value;
(4) containsKey(object obj):判断当前Map是否含键obj,若含有,则返回true,否则返回false;
(5) keySet():返回Map中所有键的组合;
(6) entrySet():将Map中的key-value存入集合,该集合的数据元素是Entry 类的对象,Entry类具有两个成员 变量key和value来描述原Map中的键和值对象;
(7) values():获取Map中的所有值对象来组成一个Collection对象。
Map有三种结构:HashMap(散裂图),LinkedHashMap(链式散裂图),TreeMap(树形图)。
(1)HashMap通过hash算法来排布存储Map中的键,也就是说HashMap中的数据元素并不是按照我们添加的 顺序排布的,存储的内存模式也不是连续的,其key值的排布而是通过Hash算法计算得到的。HashMap不能直接装入迭代器,而是将所有的键key装入迭代器,再进行遍历;或者是使用entry类,将所的数据元素转化为entry类的集合进行处理;
(2)TreeMap是一种有序的映射关系图,每对key-value对在TreeMap中的存储是有序的排列的,当我们向 TreeMap中插入新的元素时,TreeMap可能全重新排序,所以TreeMap中的任何元素在整个映射组中是不固定的;
(3)LinkHashMap是HashMap的一个子类,不同在于LinkedHahMap维护着一个应用于所有条目的的双重链 接列表,此列表定义了迭代的顺序,此顺序可以是插入顺序也可以是访问顺序。
三种Map结构的比较:
(1)HashMap存入的key-value对在取出的时候是随机的,它根据Hashcode值存储数据,根据key可以直接取值对象,具有很高的访问速度,因此在Map中插入、删除和定位元素,HashMapk是最好的选择;
(2)TreeMap取出是排序后的 key-value对,因此按自然顺序或自定义顺序遍历,TreeMap是最好的选择;
(3)若需要输出的顺序和输入的相同,则用LinkedHashMap可以很好的实现。