2010-08-05 73 views
7

我正在使用Java,我正在寻找在空间中优化并且速度很快的字符串集合(集合和列表)。我的字符串是固定的大小:3或5个字符长。Java中的快速字符串集合

如果有任何可以最适合我的收集库,请告诉我。我正在考虑一些基于字典的集合。

谢谢。

+7

什么语言/平台? – 2010-08-05 19:13:57

+4

你有几个字符串?成千上万的?百万?十亿? – 2010-08-05 19:16:15

回答

0

假设你在谈论C或C++,因为我无法想象任何其他语言,有人会寻找一个字符串库,我建议使用 Paul Hsieh

尽管我自己从来没有用过它,因为它在我的情况下不起作用,但我在2007年将其作为基础的概念适用于自己的使用。它有很好的文档记录,至少你可以学习一些关于字符串的重要内容,然后阅读Paul的材料。

1

如果我想要速度,我会使用C++和STL以及固定为8个字节的自定义字符串类。 8个字节很好地对齐并且是64位,因此可以在单个机器指令中进行比较。

使用STL,您可以选择使用std :: set,std :: map,unordered_set,std :: list或任何其他STL兼容结构。

+0

你好,我正在寻找优化Java代码。该应用程序使用大量的字符串集合,我的字符串是固定大小 – niraj 2010-08-06 18:48:37

+0

@niraj:你没有在你的问题中这么说。我会为你编辑你的问题,但你需要说明你在问题中询问的语言和平台。 – 2010-08-06 20:30:50

3

'dictionary based collections'? HashMap是默认选择。它和O(1)一样快。 它与元素的大小没有固定或没有。

3

如果你的意思是一个字符串集合,我会去用Java的默认HashSet。如果你需要更快的东西(就查找时间而言),你可以使用Trie。尝试非常快速的查找(O(字符串的长度)),而不考虑数据结构中字符串的数量,并且可以非常紧凑。

但是,请先用HashSet先测试您的代码。有多达数百万个小型字符串,我不认为它会很慢。

2

一般来说,你不能真正拥有“快速收集”,因为每个数据结构都有自己的优势和劣势。

如果你想快速添加和迭代,ArrayList是好的。如果您进行了大量删除,则可能需要使用LinkedList。如果你想快速查找,HashSet是好的,等等。

如果你有并发访问,还有其他潜在的更适合的数据结构。有时,结合多个数据结构也可能有所帮助。

总之,你需要告诉我们你要使用你的数据结构。