课程章节介绍
同学们,今天我们来聊聊Apex里非常实用的一个数据结构——Map,也就是映射,或者叫字典。
如果你有Java基础,你会发现一个不一样的地方。在Java里,Map有不同的实现,比如HashMap、TreeMap,但Apex简化了这一切。Apex所有Map底层用的都是哈希结构,你不用自己去选择算法。这样做的好处是,你只要会用Map就行,不用关心底层细节。
还有一个有意思的特点:Apex里Map的迭代顺序是确定的,也就是说,你遍历键值对的时候,每次出来的顺序都是一致的。这一点和某些语言里无序的HashMap不太一样,所以你可以依赖于这个顺序。
再来说说键,也就是Key。如果键的类型是字符串,要注意它是区分大小写的。比如,"Name"和"name"会被当作两个完全不同的键。你存了两个值,它们互不影响。
那如果是你自己定义的类型当作键呢?这时候,唯一性是由你自定义类的equals和hashCode方法决定的。你重写这两个方法的时候,一定要小心,保证逻辑一致。不然可能出现明明同一个对象,却映射到不同的值的情况。
特别要提醒的是,用sObject做键的时候要谨慎。为什么?因为sObject的内容可能会变。比如你拿一个Account记录做键,存了个值。之后这个Account对象某字段被修改了,它就变成另一个状态了,可能再也找不回原来映射的那个值。所以,一般不推荐用sObject直接做键。
最后,关于序列化。Map对象可以序列化成JSON,但有个前提——只能用特定的键类型,比如字符串。如果键是数字或者日期等,直接序列化可能会有问题,这点开发中要注意。
那么关于Map的这些要点,今天就讲到这里,大家理解了吗?下节课我们会用例子演示这些特性。
关键词
Apex
Salesforce
Developer Guide