答案 0 :(得分:2)
你可能想看看Etherpad的源代码 - 它是一个基于Java的协作文本编辑Web应用程序,所以它必须有某种字符串实现,允许对不同的区域进行并发写入访问字符串,大概不会丢失数据。当然,它是否满足您的性能要求是另一回事......
答案 1 :(得分:1)
字符串本身是线程安全的(因为它是不可变的)并且对于大多数用例而言性能相当高。
String的主要性能问题是在O(n)中突变的字符串长度(由于需要采取完整的副本)。
如果你需要处理很长的字符串,你可能想要使用Rope data structure。 Java中有几种可用的实现:
上面的两个Rope实现都符合 CharSequence 接口(String也实现了),因此如果您将应用程序设计为使用CharSequences而不是字符串,那么您可以从字符串开始并切换到如果您决定需要它们,请稍后绳索。
答案 2 :(得分:1)
This talk(免费注册要求)描述了Google Docs等用于多用户编辑的算法类型,并演示了一个简单的实现。在Scala中,但适用于任何语言。
编辑:哎呀,有点晚了!反正可能对某人有用......答案 3 :(得分:0)
好吧,StringBuffer是线程安全的。您可以将系统基于此。
答案 4 :(得分:0)
在我看来,这将是一个挑战。您需要允许单个用户“锁定”他们正在处理的字符串部分,而其他用户可以锁定并处理其他部分。基本上你所说的是一种数据库形式。
你可以用SQL做到这一点,但你必须发明一个协议。
答案 5 :(得分:0)
主要问题是跟踪变化,因为你不再依赖索引,这让事情变得困难。
所以我现在正在考虑将字符串存储在类似LinkHashMap或ListOrderedMap的内容中。但仍在对正确的数据结构进行更多研究......
编辑:在这个阶段,我将使用ListOrderedMap存储我的字符串,看看它是怎么回事......