繁体   English   中英

Groovy和Java中MAP的区别

[英]Difference between MAP in Groovy and Java

目前,我们使用 Groovy 作为前端,Java Spring 作为后端。

在 groovy 中,我们定义了一个属性Map parameters = [:] ,它将分配给private Map<String, Object> parameters; 在 Java。

我对这两种语言的 MAP 接口的实例有疑问。 当我阅读 groovy 默认创建LinkedHashMap实例和 Java 默认创建HashMap实例时,这是真的吗?

我的总体要求是保留数据的顺序, LinkedHashMap会这样做,但HashMap不会。

因此,由于前端已经是LinkedHashMap ,它会将有序数据传递到后端。

public void setParameters(Map<String, Object> parameters) {
    this.parameters = parameters;
}

是真的吗? 我是否需要将 JAVA(后端)中的 model 从MapLinkedHashMap

当我阅读 groovy 默认创建 LinkedHashMap 实例和 Java 默认创建 HashMap 实例时,这是真的吗?

Java,事实上,默认情况下不会创建任何类型的 map。 开发人员选择他们实例化的Map实现(几乎总是)。 Java 没有对应于 Groovy 的 map 文字[:] ,因此没有“默认”类型可以在 Java 中实例化。至于 Groovy,map 文字确实创建了一个LinkedHashMap

groovy:000> [:].getClass()
===> class java.util.LinkedHashMap

因此,由于前端已经是 LinkedHashMap,它会将有序数据传递到后端。 [...] 这是真的吗?

是的。 在运行时,传递给setParameters()Map object 将由您的“前端”代码生成。 该调用的行为方式与您从 Java 代码创建LinkedHashMap并将其传递给该方法一样。 运行时不会将 object 重新整形为HashMap (即使它必须做类似的事情,使它成为HashMap也很随意)。 这里重要的是类型兼容, LinkedHashMapMap

Map是一个接口。 因此,如果您需要Map作为参数或参数,您只是在请求这些保证。

如果您需要进一步的保证(例如 LinkedHashMap 保留插入顺序),那么您最好明确地请求它。

由于您在谈论“后端”和“前端”,因此两者之间还有传输问题。 如果您正在使用无法在地图(例如 JSON)中保持顺序的传输(而不是直接调用),那么您最好不要依赖不同的数据类型。 例如,改用键值元组列表。

关于默认值的附注

Groovy 有一个文字来快速创建地图( [:]或 forms 带有像[a: 42]这样的键)。 正如您所说,这些地图是LinkedHashMap

groovy:000> [:].getClass()
===> class java.util.LinkedHashMap

由于 Java 最多 15 没有地图文字,因此没有“默认” - 默认是您制作的。

一般来说,最好始终考虑您实际需要的数据类型。 这也意味着 Groovy 的 map 文字可能是错误的选择。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM