Map查找表

Map:是一个接口,其定义的集合又称查找表,用于存储“key-value”映射对。key可以看成是value的索引。

          作为key的对象在集合中不能重复,即:在一个Map中不能有2个equals()比较结果为true的key。

          Map集合看起来像一个多行2列的表格,常用的2个实现类为:hash表(HashMap)和二叉树表(TreeMap)

          LinkedHashMap:维护着一个双向循环链表,通常迭代顺序为存放顺序。可实现有序Map。


int  size():获取“key-value”对的个数,而不是元素总个数


Mapzhong中String  tostring()的返回形式为:{key1 = value1,key2 = value2,...}


V  put(K  key,V  value):向Map中存放元素

若key在Map中不存在,会将给定的key与value存入Map中,返回值为null

若key在Map中存在,添加新的value,则是替换原有的value,返回被替换的value

这里我们应该注意:若value是一个包装类,我们获取put返回值时,应当使用相对应的包装类去接收value,而不应该使用基本类型。因为会涉及到隐式的自动拆箱,可能引发空指针异常。


V get(K  key):获取Map中给定的key对应的value并返回,若key在Map中不存在则返回null


V  remove(K  key):根据给定的key删除“key-value”对元素,并返回key所对应的value。若key不存在则返回null。


boolean containsKey(K  key):查看当前Map中是否包含给定的key


Map提供了三种遍历方式:

(1)遍历所有的key

Set<K>  keySet():将当前Map中所有的key存入一个Set集合中,并返回集合。我们只需遍历该集合即可。

(2)遍历每一个键值对

Set< Entry<K><V> >   entrySet()

将当前Map中每一组key-value对封装为一个Entry对象并存入一个Set集合中,并返回。

该方法获取一个Set集合,该集合中存放若干个Entry实例,每个实例内部都包含两个属性,分别保存key、value。

这样我们遍历每一个Entry实例就相当于遍历了每一个键值对。

(3)遍历所有的value(不常用)

Collection  values():将所有的value放入一个集合中,并返回。

不能放入Set集合,因为value允许重复。


使用HashMap的注意事项:

(1)我们应当尽量保证不相同的key,hashCode值也不应该相同,否则将大大降低hashCode()的检索效果

(2)若两个对象equals()结果为true,那么两个对象的hashCode值也一定相等。

(3)若两个对象equals()结果为false,我们也应尽量保证它们的hashCode值不相同

(4)当key-value的属性没有改变的情况下,hsahCode的值应当是一个稳定值

(5)一般我们在重写equals()也必须重写hashCode()


装载因子及HashMap的优化:

Capacity:容量,即散列数组的大小

Initial capacity:初始容量,默认为16

Size:当前散列表中存储数据的对数

Load factor:加载因子,Size/capacity的值,默认为0.75,用于判断是否扩容和rehash。可减少资源浪费,和提高性能。


你可能感兴趣的:(HashMap,map,map的遍历)