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

时间:2016-05-04 12:11:00

标签: java dictionary collections clone mutability

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

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

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

1 个答案:

答案 0 :(得分:2)

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

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

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