标签: immutability

高效的不可变地图实施?

我想知道是否有一个地图的实现是:

  • 不可变,因此我可以在函数式编程中使用它,并毫不费力地确保事务和并发.
  • .我已经检查了二进制搜索树(RB,AVL)和Tries,但它们似乎都没有哈希表那么快.是否有支持更新和检索的固定时间的地图实现?(或至少非常快的对数时间)

简而言之,是否存在可以与Hash Maps进行性能比较的功能数据结构?

performance functional-programming map immutability

10
推荐指数
1
解决办法
3351
查看次数

Java中的功能数据结构

Java标准库是否具有功能更新的任何功能数据结构,如不可变集,列表等?

java functional-programming set immutability

10
推荐指数
1
解决办法
2900
查看次数

功能/不可变数据结构是否仍然可用于非垃圾收集上下文中的并发?

不可变数据结构的一个卖点是它们可以自动并行化.如果没有发生突变,则可以在线程之间传递对函数数据结构的引用而不进行任何锁定.

我开始考虑如何在c ++中实现功能数据结构.假设我们在数据结构的每个节点上都有引用计数.(功能数据结构共享数据结构的旧成员和更新成员之间的结构,因此节点不会唯一属于一个特定数据结构.)

问题是如果在不同的线程中更新引用计数,那么我们的数据结构就不再是线程安全的.将互斥锁附加到每个节点都很昂贵,并且无法使用不可变数据结构进行并发.

有没有办法使并发不可变数据结构在c ++(和其他非垃圾收集环境)中工作?

c++ concurrency functional-programming immutability data-structures

10
推荐指数
1
解决办法
938
查看次数

Scala:包含可变和不可变集

我发现了一个我可以理解的可变集的奇怪行为:

我有一个对象,我想添加到一个集合.该类的equals方法被覆盖.当我向set添加两个不同的对象时,它为equals方法产生相同的输出,我在contains方法的可变和不可变集之间得到了不同的行为.

这是代码片段:

class Test(text:String){
  override def equals(obj:Any) = obj match {
    case t: Test => if (t.text == this.text) true else false
    case _ => false
  }
  override def toString = text
}

val mutableSet:scala.collection.mutable.Set[Test] = scala.collection.mutable.Set.empty
mutableSet += new Test("test")
println(mutableSet)
println(mutableSet.contains(new Test("test")))

val immutableSet:scala.collection.immutable.Set[Test] = scala.collection.immutable.Set.empty
immutableSet += new Test("test")
println(immutableSet)
println(immutableSet.contains(new Test("test")))
Run Code Online (Sandbox Code Playgroud)

这产生了输出:

Set(test)
false
Set(test)
true
Run Code Online (Sandbox Code Playgroud)

在我看来,contains的两个调用应该产生相同的输出(true).

任何人都可以帮助我理解这里的区别,或者这是scala不可变集实现中的错误吗?顺便说一句,我使用scala 2.8.1.final

谢谢.

scala mutable set immutability scala-collections

10
推荐指数
2
解决办法
2151
查看次数

不可变容器内的可变类型

我对修改元组成员有点困惑.以下不起作用:

>>> thing = (['a'],)
>>> thing[0] = ['b']
TypeError: 'tuple' object does not support item assignment
>>> thing
(['a'],)
Run Code Online (Sandbox Code Playgroud)

但这确实有效:

>>> thing[0][0] = 'b'
>>> thing
(['b'],)
Run Code Online (Sandbox Code Playgroud)

还有效:

>>> thing[0].append('c')
>>> thing
(['b', 'c'],)
Run Code Online (Sandbox Code Playgroud)

不起作用,并且有效(嗯?!):

>>> thing[0] += 'd'
TypeError: 'tuple' object does not support item assignment
>>> thing
(['b', 'c', 'd'],)
Run Code Online (Sandbox Code Playgroud)

看似与以前相同,但有效:

>>> e = thing[0]
>>> e += 'e'
>>> thing
(['b', 'c', 'd', 'e'],)
Run Code Online (Sandbox Code Playgroud)

那么,当你能够并且不能修改元组内的某些内容时,游戏的规则到底是什么?它似乎更像禁止使用赋值成员的赋值运算符,但最后两个案例让我感到困惑.

python tuples list mutable immutability

10
推荐指数
2
解决办法
593
查看次数

R:选择子集而不复制

有没有办法从对象(数据框,矩阵,向量)中选择一个子集而无需复制所选数据?

我使用相当大的数据集,但从不更改它们.然而,为方便起见,我选择要操作的数据子集.每次制作一个大的子集的副本是非常低效的内存,但是正常的索引和subset(以及因此xapply()的函数族)都创建了所选数据的副本.所以我正在寻找可以解决这个问题的功能或数据结构.

一些可能符合我需求的方法,并希望在一些R包中实现:

  • 写时复制机制,即仅在添加或重写现有元素时复制的数据结构;
  • 不可变数据结构,只需要为数据结构重新创建索引信息,而不是其内容(比如通过仅创建保存长度的小对象和指向同一个char数组的指针来从字符串中创建子字符串);
  • xapply() 不创建子集的类似物.

r subset immutability copy-on-write apply

10
推荐指数
1
解决办法
2144
查看次数

为什么在Rust中强制执行不变性,除非使用`mut`另有说明?

为什么在Rust中强制使用不变性,除非你指定mut?这是安全性的设计选择吗,您是否认为它在其他语言中应该如何自然?

我应该澄清一下,我还是Rust的新手.那么这是一种与该语言中的另一个功能相关的设计选择吗?

immutability rust

10
推荐指数
1
解决办法
2038
查看次数

为什么Java的BigDecimal类没有被声明为final?

在检查Java BigDecimal类的源代码时,我很惊讶它没有被声明为final class:

类BigDecimal

public class BigDecimal
extends Number
implements Comparable<BigDecimal>
Run Code Online (Sandbox Code Playgroud)

不可变的,任意精度的带符号十进制数.

(来自Oracle Docs)

是否有特定原因或开发人员忘记添加该关键字?不将不可变类声明为final是不错的做法?

同样的情况也适用BigInteger,但不是String宣布为最终的.

java final immutability

10
推荐指数
1
解决办法
3435
查看次数

如何在C#中证明字符串的不变性?

在我上次的c#访谈中,
我被要求证明C#字符串的不变性,我知道c#字符串的不变性意味着什么,但是有可能通过代码证明c#字符串的不变性吗?请问我有一个示例代码片段吗?提前致谢

c# string immutability

10
推荐指数
1
解决办法
399
查看次数

按键对ImmutableSortedDictionary范围进行枚举

我正在阅读有关C#的内容ImmutableSortedDictionarySystem.Collections.Immutable并在考虑如何在程序中应用它。我非常喜欢C ++的lower_boundupper_bound(请参阅此处),而我更希望看到某种范围查找。但是,文档中似乎缺少类似的方法。我想念什么吗?还是MS真正提供了分类字典,而没有有效访问分类范围?这似乎并不像对IEnumerable扩展方法那样,可以对其中一个键进行某些操作,所以我有点困惑,因为我没有看到集合直接提供的某些功能。

.net c# algorithm immutability immutable-collections

10
推荐指数
1
解决办法
229
查看次数