不可变集合的真正优势是什么?

Mic*_*ael 6 functional-programming scala immutability data-structures

斯卡拉提供不可变的集合,如Set,List,Map.我知道不变性在并发程序中具有优势.但是,常规数据处理中不变性的优势究竟是什么?

如果我枚举subsets,permutationscombinations为例子吗?是否不可变的集合这里有什么优势?

Mat*_*all 10

常规数据处理中不变性的优势究竟是什么?

一般来说,不可变对象更容易/更容易推理.

  • 减少状态=减少分析. (3认同)

Mik*_*scu 7

确实如此.由于您在枚举上进行了枚举,因此您可能希望确定在枚举时不会无意中添加或删除元素.

不可变性在函数式编程中是一种范式.使集合不可变允许人们将它们看作原始数据类型(即修改集合或任何其他对象导致创建不同的对象,就像添加2到3不会修改3,但创建5)


Lan*_*dei 6

扩展Matt的答案:根据我的个人经验,我可以说基于搜索树的算法实现(例如广度优先,深度优先,回溯)使用可变集合定期作为一堆热气腾腾的垃圾:你忘了复制一个集合在递归调用之前,或者如果收回集合,则无法正确收回更改.在那个领域,不可变的收藏显然是优越的.当我无法正确使用Java的集合时,我最终用Java编写了自己的不可变列表.瞧,第一个"不可变"的实施工作立即起作用.