考虑下面两个片段(从这个JSPIF条目):
let val = 0;
for(let i of indices) {
val += map.get(i);
}
// ---
let val = 0;
for(let i of indices) {
val += obj[i];
}
这里,map
是一个map
,obj
是一个普通的老JavaScript对象(let obj={}
),而索引是一个随机索引数组。
obj
和map
都预先填充了数据,因此查找实际上返回了数据。查看jsperf获取完整代码。
为什么普通的老javascript对象比
Map
的性能高出5倍?这仅仅是因为在撰写本文时,Map
s仍然是非常新且未优化的吗?或者在Map
查找中是否存在一些开销,这些开销总是会阻止它像POJO一样快?
如果它还没有被优化,我们能期望它最终比POJO更快地进行随机查找吗?为什么?为什么不呢?
感谢@Bergi的回答。
与Map
相比,普通JavaScript对象在初始jperf中表现如此出色的原因是因为在引擎盖下,JS引擎可以看到我们像使用数组一样使用对象(连续整数键),所以它“假设”它是一个数组,并可以在此基础上进行一系列优化。而不是与Map
。
但是Map
还有一个缺点,它需要方法调用(Map.get(p)
),而不是直接的属性查找(obj[p]
)。这不是(不可能是?)如本jsperf所示,进行了优化:http://jsperf.com/map-vs-pojo-lookups
有两张数据表,通过第三张数据表来表示关联关系,我们称之为多对多的映射 如上图,通过一个中间数据表的两个字段,分别指向两个对象的主键,可以实现多对多映射。所以,Pet.foods(一个 List<Food>) 或者 Food.pets(一个List<Pet>)就是多对多映射。 在 POJO 中配置多对多映射 在 POJO 类中字段中增加注解 @ManyMany: @Table("t_food")
我使用此链接中的以下代码为我的一个数据模型类(JSON到JAXB模型的转换)添加自定义反序列化程序。 我想使用com。fasterxml。杰克逊。jaxrs。json。JacksonJaxbJsonProvider,用于其他数据模型的JSON序列化/反序列化。 JacksonJaxbJsonProvider的默认实现非常适合我的JAXB模型,将超类作为抽象类。但是,一旦我提供了自己的自定义Obje
在Dozer的帮助下,我想将映射到DTO类 但是这两种设置
我一直在使用多对多映射,这里是我的POJO类。 Menu.java: 使用者爪哇: 我有用户,菜单和第三个映射表这是自动创建的,我成功地得到结果时,在mysql中执行以下查询 我想在Hibernate中写这个查询如何处理这个东西???
我刚刚发现了这个特性: Map:Map对象是简单的键/值映射。 映射对象可以按插入顺序迭代其元素。Map对象必须使用哈希表或其他机制来实现,这些机制平均提供的访问时间与集合中的元素数成次线性关系。本地图对象规范中使用的数据结构仅用于描述地图对象所需的可观察语义。它并不打算成为一个可行的实施模式。 …对我来说仍然像是一个对象,所以很明显我错过了什么。 为什么JavaScript获得了一个(支持良好的
我有一个对象,我正试图映射到。现在这个有一个名为的枚举,其中包含一些值。我想使用将它们映射到中的其他枚举值。以下是我到目前为止的代码: 当我尝试编译它时,我得到了错误: