String 用于存储字符串的数据结构?

String 用于存储字符串的数据结构?,string,data-structures,String,Data Structures,我正在寻找一个数据结构来存储字符串。我需要在接口中使用一个函数,该函数将字符串作为其唯一参数,并返回一个引用/迭代器/指针/句柄,该引用/迭代器/指针/句柄可用于在数据结构的剩余生命周期中检索字符串。不需要设置成员资格、条目删除等 我更关心的是内存使用率,而不是速度。我认为最好的选择是一个。常见的实现在数组中为新元素分配额外的空间会带来一些开销,但是如果内存是这样的需求,那么可以为每个新元素手动分配。它会比较慢,但只会使用字符串所需的内存。我认为这里的关键字是,每个不同字符串只存储一个副本。在J

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


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

我认为最好的选择是一个。常见的实现在数组中为新元素分配额外的空间会带来一些开销,但是如果内存是这样的需求,那么可以为每个新元素手动分配。它会比较慢,但只会使用字符串所需的内存。

我认为这里的关键字是,每个不同字符串只存储一个副本。在Java中,这是通过以下方式实现的:


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


您可以使用作为指针返回Trie中字符串的最后一个标记,该标记唯一标识字符串,并可用于通过向上遍历Trie来重新创建字符串。

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

  • 固定长度(数组类型结构)
  • 长度可变,但最大大小在运行期间是固定的(指针类型结构)
  • 链表结构

  • 请说得更具体些。哪种语言?我们需要更多的信息来帮助。。。大多数语言已经提供了有效处理字符串的数据结构(例如Java的StringBuilder)。我认为他所说的是存储一组字符串,而不仅仅是一组字符串。这可能是低效的:对于单个字符,会有很多指针。后缀大小为O(n),但较大。在java中,每个节点都有一个互斥锁和cond:REALLY BIG。在决定之前一定要测量实际尺寸。@Jonas:绝对是个好建议。请注意,我们并没有特别讨论后缀尝试,而是将trie作为一般的字符串存储/查找数据结构。trie的一个变体是Patricia trie,它在某种程度上处理内存使用问题,它尽可能避免使用单字符节点。快速谷歌检查显示了.net中类似的功能。String.Intern()静态类。
    String ref1 = "hello world".intern();
    String ref2 = "HELLO WORLD".toLowerCase().intern();
    assert ref1 == ref2;