【发布时间】:2011-01-22 08:15:34
【问题描述】:
据我了解,有几种方法(也许还有其他方法)可以在 Java 中创建 Map 的浅表副本:
Map<String, Object> data = new HashMap<String, Object>();
Map<String, Object> shallowCopy;
// first way
shallowCopy = new HashMap<String, Object>(data);
// second way
shallowCopy = (Map<String, Object>) ((HashMap<String, Object>) data).clone();
一种方式优于另一种方式,如果是,为什么?
值得一提的是,第二种方式会给出“Unchecked Cast”警告。所以你必须添加@SuppressWarnings("unchecked") 才能绕过它,这有点烦人(见下文)。
@SuppressWarnings("unchecked")
public Map<String, Object> getDataAsMap() {
// return a shallow copy of the data map
return (Map<String, Object>) ((HashMap<String, Object>) data).clone();
}
【问题讨论】:
-
在较新版本的 Java 中(准确地说是从 Java 10 开始),您可以使用 Map.copyOf 静态工厂方法。但请注意,它返回一个不可修改的地图!
标签: java map clone shallow-copy