In my Android app I want to have an input field with autocomplete. The number of items will be about 300000. The best solution seems to be to put the items into a file (on sdcard), one item per line, each line would have the same number of characters so that I can seek to specific line number. If the user enters something in the text field, I would binary search (via RandomAccessFile) the file and show suggestions.
I want the autocomplete to be super fast (ideally under 100ms but I guess it’s impossible), what optimizations I can do?
Update 1:
I will convert the users input to lowercase english characters (a-z) with spaces. So ‘A/b’ would be converted to ‘a b’ and then searched.
Uodate 2:
I now realized I need additional thing – to search for word-starting substrings.
What your looking for is called a TRIE
http://forums.sun.com/thread.jspa?threadID=5295936
In computer science, a trie, or prefix tree, is an ordered tree data structure that is used to store an associative array where the keys are usually strings. Unlike a binary search tree, no node in the tree stores the key associated with that node; instead, its position in the tree shows what key it is associated with. All the descendants of a node have a common prefix of the string associated with that node, and the root is associated with the empty string. Values are normally not associated with every node, only with leaves and some inner nodes that correspond to keys of interest.