首页 > 解决方案 > 是否建议在字段中缓存 Collections.unmodifiableList() 结果?

问题描述

推荐的方法是哪一种:

private final List<Object> list = new ArrayList<>();

public List<Object> getListView() {
    return Collections.unmodifiableList(list);
}

或者

private final List<Object> list = new ArrayList<>();
private final List<Object> listView = Collections.unmodifiableList(list);

public List<Object> getListView() {
    return listView;
}

后者节省了对象创建,但值得付出努力吗?

标签: javaperformancecachingcollectionsimmutability

解决方案


创建 anunmodifiableList是一个 O(1) 操作(本质上,它实例化 ajava.util.Collections$UnmodifiableList并将您的列表分配给数据成员)。

除非您有一个非常令人信服的特例基准来显示相反的情况,否则可能不值得麻烦缓存它。


推荐阅读