![]() |
1
6
首先要做的是去掉所有同步的关键字。 最简单的方法是将dict声明为ConcurrentHashMap:
原因是CCHM持有的最新合同。 最后,add to dictionary可以如下所示:
也可以从getAllWords中删除synchronized。 编辑:在考虑了汤姆的评论之后。在这个“例外情况”中进行双重查找可能不值得。如果案例没有抛出异常,那么它将是合适的。 |
![]() |
2
3
把所有的
|
![]() |
3
1
|
![]() |
4
1
当你说提高性能时,你对使用率统计有什么想法吗?例如,有多少写入到读取,以及内部映射有多大? 如果读取的数量成比例地高,并且映射主要在启动时填充(并且不是很大),那么一个copy-on-write策略可能是最好的选择。我们使用(并保持)了 CopyOnWriteMap 对于并发读取,它的性能比ConcurrentHashMap好(在我们的测试中提高了大约10%)。 |
![]() |
5
1
在下面的示例中,每个方法访问一次映射,而不是两次(无同步)
|
![]() |
6
0
|
![]() |
7
0
如果读的比写的多(通常是这样),可以考虑使用 ReadWriteLock 这样读者就不会互相阻拦了。 |
![]() |
8
0
有一个 许多 一种储存词典的有效方法。使用重量级的东西,比如Java的默认HashMap和String对象,并不是其中之一。 因此,当然,您可以去掉synchronized关键字,并尝试通过处理Java特殊短语来获得一点点左右的速度。 当然,有地图 包含 是O(1)。。。但是当你在地图中放入数百万个字符串时,它的大小并不是O(1);) 深思熟虑:用Trie来判断一个词是否存在,可能比简单地用Trie来判断要快 计算 “让我们用一个HashMap,它是O(1),所以你不能打败它” 我可以告诉你,比如说,Google的“translate”和Google的“find as you type”绝对不是通过在内存中存储数百万个Java字符串对象来实现的 我-需要-不断调整大小-和-我-调整大小-非常缓慢 你的要求是什么?多少字?支持多少种语言? |