gpt4 book ai didi

java - 有效使用 Collections.unmodifying*()

转载 作者:行者123 更新时间:2023-12-02 07:33:51 25 4
gpt4 key购买 nike

在考虑效率、代码可读性和其他标准时,公开集合的只读 View 的更好方法是什么?从效率的角度来看,使用 methodA 而不是 methodB 真的有什么区别吗?请考虑可能经常访问 list 的情况 - 就像在 gui 表的数据模型中一样。

我假设Collectionss.umodifiebleList()总是创建一个新对象,这是正确的吗?

class A{
List<Object> list = new ArrayList<Object>();
List<Object> listReadOnly = Collections.unmodifiableList(list);

List<Object> methodA(){
return listReadOnly;
}

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

最佳答案

是的,Collections.unmodifyingList 每次都会创建一个新对象 - 但这是一个非常便宜的操作。 (它没有太多工作要做。)

我不确定 GUI 的数据模型是否可能会一遍又一遍地获取集合 - 它显然会获取集合然后迭代它,但这是另一回事。

如果只是在每次提示 GUI 数据已更改时获取集合,那么我预计这种情况相对很少发生 - 而不是“数十万次”每秒”的范围,这确实是一个瓶颈。我希望无论调用什么代码,都可能比创建不可修改列表所做的工作多得多。

基本上,这感觉像是过度的微观优化,除非您有证据表明它导致了问题。一如既往,您应该:

  • 定义性能要求
  • 用最简单的方式编写代码,以满足其他要求
  • 编写测试来检查您是否满足性能要求
  • 如果您目前没有满足这些要求,请仔细找出瓶颈所在(无论是使用分析器还是其他技术)
  • 修复这些瓶颈,同时尽可能减少可读性损失
  • 起泡沫,冲洗,重复

关于java - 有效使用 Collections.unmodifying*(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23926872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com