erlang之前数据结构抽象只有record,在OTP 17.0后,引入了map。现在使用了map将近一年了,对map和record的优劣点总结如下。
灵活性
map比record灵活得多,map中间可以任意加key和value,尽管可以在hrl定义这个map的类型,record 就不行了。基于此,可以认为record是强类型的,所以重构起来很方便;map如果你要重构一个key的名字,我只能呵呵了ide语法支持
record比map好得多,record里面有提示,map自己小心把key写错,导致匹配或者get的时候出错哦修改内存结构
如果热更新更改了record的结构,这次热更新注定要失败的(匹配会失败);map可以避免这种情况,前提是你写了maps:is_key(XX,XX),提前判断有没有这个key。当然为了这次热更新的成功的代码会一直放在代码里面。后来我嫌麻烦,只要更改了内存结构,统统重启。所以,如果是为了热更新成功,可以选用map的话。结构实现
record是数组,访问很快,map也不慢,如果你要考虑速度问题选用哪种数据结构的话,我也只能呵呵了。毕竟你要懂一个体系结构中的Amdahl定律相关api
使用map,有一个小小的问题,就是lists下面基本和key相关的方法,比如查找,删除,都是默认list里面存储的是record,用map就不行了。所以,需要自己搞一个工具类,至少要有查找和删除、替换吧