如果"键入时搜索联系人"必须快速,并且联系人可以有多个电话号码,您将如何在android手机中存储联系人。
我认为Trie Tree将是最好的。在名称字符的末尾,您可以存储一个对象及其元素,如电话号码、电子邮件变量和您想要的一些额外变量的数组。
在搜索名称时,您可以遍历Trie Tree中的字符,并按排序顺序显示至少n个名称。我认为Trie树将比任何其他数据结构都快。
您可以使用标准的TreeMap<String, Contact>
来实现此功能(其中Contact
将是存储电话号码等的类(。一种选择是使用TreeMap.tailMap()
从用户迄今为止键入的内容开始获取条目的子映射(由原始映射支持,因此这应该很快(。您可以使用自定义比较器根据需要调整排序(例如,不区分大小写(
p.s.:这并不能解决持久性问题,所以您可能希望从一开始就使用数据库,例如Room。前缀搜索可以通过搜索范围(prefix, prefix + "uffff")
来实现。对于数据库,通常会添加一个限制。