迈向JAVA架构师的学习之路(一) 对map的思考

  几个月前我还对架构师的概念十分的模糊,架构师主要干什么,架构师需要些什么技能,如何成为一名架构师?都是一脸茫然。现在我却发现我在慢慢地在走在正道上。打算写一些博文来记录自己的成长。
  几天讨论的是map的作用。
  map在我们的java的学习中十分的常用。那各位同学们能说说map的主要作用是什么吗?我自己的第一印象是一种存储数据的结构,map由key,value组成,通过key可以找到value。这就是我知道的全部了。但是这样的了解是完全不够的。map在架构里面非常重要,以至于今年很大部分JAVA面试者都会被面试官问道知不知道ConcurrentHashMap以及其原理。区区一个map为何这么重要?我们今天就来这里进行讨论一下。
  首先,map与list有什么区别?他们都有的相同点是都可以存储一个“集合”的数据。list是单群一个集合的数据按数组或者链表等结构存起来。而map不同,map将这个集合中的每个数据(value)都先一个一个跟key绑定起来,我们可以认为这个key里面存了对应vlue的引用,我只要拿到key就可以通过这个key取到相应的值,那么多这么一个映射的key有什么用呢,我们在通过map.get(key)这个方法获取value的时候,我们需要从很多的key中(keySet)找到相应的key,然后再找到数据,我们可以在keySet中找key的这个过程进行优化,我们可以设计一些链表二叉树等结构,使我们能快速找到某个key,然后找到value,这个过程像极了数据库中的索引的工作原理!
map与list的最大的不同就是map更注重对数据的检索,list不注重检索。这个差异使得他们的使用场景不同,如果我们有的场景需要遍历 一个list去查找一个数据,我们就知道这个时候使用list是不合适的,我们应该将其转化为map,提高检索效率。
  map的高效检索能力常被用来当作项目中的配置缓存。比如springMVC初始化里面就有一个map用来存放将requestMapping配置的地址与对应的方法组成kv数据存起来,以后的请求过来就能直接按照请求地址从这个map中取出请求要进入的handler,反射调用。mybatis中也有一个map,初始化时将命名空间+方法名+参数作为key,对应的sql语句为value,以后调用mapper中的方法时代理类直接根据key从这个map中取出sql进行jdbc语句查询。这些框架里面的map都起到了缓存与检索的作用。我们自己在项目中一般业务代码都是增删改查很少会利用到初始化,所以map的这个功能利用的不多。但是有些有限的场景可以利用,比如说有一项操作是要往数据库里面查询数据,但是这个查询非常的频繁,每秒可能几十次,甚至更多,那么如果全部都往数据里面差实在是不明智,我们可以先将数据从数据里面取出来(list),组成map,将数据取到了内存里面,我们后面的查询直接查这个map就可以。性能将会有极大的提升。当然这种方案只比较适合数据不会有太大变化的场合。
  完结。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值