存储字符串的数据结构?

时间:2009-01-28 10:15:41

标签: string data-structures

我正在寻找一个存储字符串的数据结构。我需要一个接口中的函数,它接受一个字符串作为它的唯一参数,并返回一个可用于检索字符串的引用/迭代器/指针/句柄数据结构的剩余生命周期。不需要设置成员资格,条目删除等。

我更关心内存使用而不是速度。

4 个答案:

答案 0 :(得分:15)

用于存储字符串的一种高效数据结构是Trie。这通过使用相同的内存存储具有公共前缀的字符串来节省内存和时间。

alt text

你可以使用指针返回Trie中字符串的最终标记,它唯一地标识字符串,并可以通过向上遍历Trie来重新创建字符串。

答案 1 :(得分:3)

我认为这里的关键字是string interning,您只存储每个不同字符串的一个副本。在Java中,这是由String.intern()完成的:

String ref1 = "hello world".intern();
String ref2 = "HELLO WORLD".toLowerCase().intern();
assert ref1 == ref2;

答案 2 :(得分:0)

我认为这里最好的选择是ArrayList。对于新元素,在数组中分配额外空间时,常见的实现有一些开销,但如果内存是这样的要求,则可以手动为每个新元素分配。它会更慢,但只会为字符串使用必要的内存。

答案 3 :(得分:0)

存储字符串的方法有三种:

  1. 固定长度(阵列类型结构)
  2. 可变长度但最大尺寸在运行时间(指针类型结构)中是固定的
  3. 链接列表结构