前言:
眼前大家对“java比较map”大概比较注意,同学们都需要剖析一些“java比较map”的相关文章。那么小编在网络上汇集了一些对于“java比较map””的相关内容,希望大家能喜欢,看官们一起来了解一下吧!Map,这个单词很多人都认识,不过第一反应应该是“地图”,其实它还有一个意思叫“映射”。
地图从某种意义上就是映射的意思。
什么叫做映射呢?
地图上的一个点,就对应着现实生活中的一个地方,这种一一对应的关系就叫映射。
在Java里面,Map就是满足这种一一映射关系的集合,也叫双列集合。
前几天学的集合叫Collecion,是单列集合。
Map存储元素是一对一对的存的(就像夫妻一样),所以又叫夫妻集合。Collecion存储元素是一个个存储的(就像单身狗一样),所以又叫单身狗集合。
好吧,夫妻,单身狗什么的完全是我瞎掰的,不过这样好理解好记忆。
既然要学习Map,那先看看Map集合中的继承关系:
从上到下依次学习,先学Map,再学HashMap。
Map中的元素有什么特点呢?
每一个元素具有两个值:key(键),和value(值)。key是不能重复的。value是可以重复的
发现没有,key它就有点类似于索引的存在,它不可能重复,但是value是可以重复的。
一、常用方法
既然是集合,那毫无疑问,最重要的的几个方法无外乎就是:增、删、改、查,以及集合遍历的方法。
①put方法:增加元素、修改元素。
它和我们接触过的add方法非常类似。
其中它还有个额外的作用:如果键值对已经存在了,因为key是不能重复的,就会将对应的value值替换掉,此时,增加元素也就成了修改元素。
其返回值也有不同:
如果是增加元素,会返回null。如果是修改元素,会将修改的那个元素返回;
②remove方法:删除元素。
根据key值删除对应的元素。
其返回值:该key对应的值。
③get方法:获取元素
根据key值获取对应的值。
返回值:该key值对应的值。
④size方法:map元素数量
存了三对值,元素数量也就是3。
其中还有两个常用方法:keySet方法和entrySet方法
二、Map集合遍历
Map最重要的一个关键要素一定要牢牢记住:
Map集合里面一个元素包含:一个key和一个value,key就叫键,value就叫值,它们合在一起就叫键值对。
1.遍历方式一:根据key找value
数组里面是如何遍历的?
一个for循环直接遍历,因为索引是有序的,从0开始依次往后,所以能直接用。
key值就类似于索引,但是它不允许重复,也不是有序的,所以需要先获取集合中所有的key值,再遍历。
①keySet方法:获取集合中的所有key值。
因为Map集合中的key值很多,它返回的也是一个集合,因为key值不可能重复,所以是Set集合。
②增强for循环:
将每一个key遍历出来,再用get根据key值获取对应的value。
2.遍历方式二
该方式的核心思想就是将:一个Map集合转换成一个Set集合。
就是把Map中的key和value当成一个值,也就是键值对(entry)。
Map集合不能直接使用迭代器或者增强for循环进行遍历,但是转成Set之后就可以使用了。
①entrySet方法:获取Map集合中的键值对集合
就相当于把Map集合转换成Set集合。
Set集合怎么遍历?直接增强for循环
②增强for循环遍历Set集合
这样就可以得到集合中所有的键值对。
③getValue方法:获取键值对中的value。
从键值对中获取其中的值。
④getKey方法:获取键值对中的key。
从键值对中获取其中的键。
三、HashMap、TreeMap
1.HashMap
HashMap是Map的一个实现类,看它的名字就知道,它的底层结构是哈希表。
那HashSet和HashMap有什么关系呢?
HashMap一个元素有两个值:key和value,其中key不可重复,value可以重复;HashSet一个元素有一个值,并且这个值能重复。
看出它们的相同点了没有?
其实HashSet就是HashMap,只不过HashSet只使用了HashMap中的key,value底层用其他一个不可变的值代替了。
现在发现Map和Set的区别没有,本质上Set就是Map中key那一列。
2.LinkedHashMap
LinkedHashMap,同样的道理,它和LinkedHashSet也是一回事。
LinkedHashMap是HashMap的一个子类,其作用和LinkedHashSet一样,就是元素有先后顺序了。
3.TreeMap
还是一样,TreeMap和TreeSet也是一回事。
TreeSet有何特点:
我们都知道Set它的元素打印出来是无序的,但是TreeSet它的元素又是有序的了,并且默认是升序排序的。
底层是怎么做到的呢?
很简单,还记得昨天学过的比较器么?因为其底层是实现了比较器Comparable接口,所以有了排序规则。
所以因为这个关系,如果是我们自己创建的类,要将类放入TreeSet的话,就得自己实现Comparable接口,并且自定义规则。
TreeMap也是同样的道理,只不过它有序的是key。
总结:
标签: #java比较map