>> If the strings are not known until run time, the most
>> efficient way is to allocate a large block of storage, and move the
>> strings in end-to-end, using a separate array to hold either pointers or
>> indices into the large block. 
>>
>> When the block is full, allocate another large block using New.  There
>> are two ways to manage the storage.  (1) Extension block method:  Use a
>> second array to point to the set of large blocks.  Each string will be
>> accessed using two pointers or two indices.  The first will point to the
>> particular block, and the second will point to the string within the
>> block.  (2) Single block method:  Make the new block twice as large as
>> the previous block, move the existing strings into the new block and
>> then Dispose the old block.
>
> Very convoluted. A linked list or string collection would do just fine.
 
 
In my earlier response to this post, I should have asked how you allocated storage for that linked list or string collection.  My suggestions deal mainly with storage allocation.  Within the blocks you could choose to have a linked lis or a tree structure if you so chose.  As I have pointed out before, storage management and data access are separate issues.
 
Frank Rubin