返回集合的副本或克隆以防止可变性

Returning copies or clones of collections to prevent mutability

我需要为 HashMap 的值提供一个 getter 方法,但是我不允许对返回的 Collection 或其元素进行更改,这些元素将反映在原始 HashMap 中,我正在获取值设置自。我目前是这样做的:

public Collection<T> getCollection() {
    Collection<T> collection = map.values();
    return collection;
}

这是否足以实现我打算做的事情,或者对返回的 Collection 的更改是否仍会反映在我的 HashMap 中?我问的原因是因为我知道对 Collection 的任何更改都会返回我的 Map 的 .values() 方法反映在原始 Map 中。谢谢!

如果您想查看值,可以使用 Collections.unmodifiableCollection

public Collection<T> getCollection() {
 Collection<T> view = Collections.unmodifiableCollection(map.values());
 return view;
}

这会给你一个 view,即:客户不能改变它,但改变对他们是可见的。