首页 > 解决方案 > Groovy 和 Java 中 MAP 的区别

问题描述

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

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

我有一个关于这两种语言的 MAP 接口实例的问题。当我阅读 groovy create by default instance ofLinkedHashMap和 Java create by default instance of 时HashMap,这是真的吗?

我的总体要求是保留数据的顺序,LinkedHashMapHashMap不是。

因此前端已经存在LinkedHashMap,它将有序数据传递到后端。

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

这是真的吗?我是否需要将 JAVA(后端)中的模型从更改MapLinkedHashMap

标签: javagroovycollections

解决方案


当我阅读 groovy create by default instance of LinkedHashMap 和 Java create by default instance of HashMap 时,这是真的吗?

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

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

所以前端已经是LinkedHashMap,它会将有序数据传递到后端。[...] 是真的吗?

是的。在运行时,Map传递给的对象setParameters()将由您的“前端”代码生成。该调用的行为方式与您LinkedHashMap从 Java 代码创建 a 并将其传递给该方法的行为相同。运行时不会将对象重新塑造成 a HashMap(即使它必须做类似的事情,让它成为 aHashMap将是奇怪的任意)。这里重要的是类型是兼容的,并且LinkedHashMap Map.


推荐阅读