首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >手机联系人android中的搜索算法

手机联系人android中的搜索算法
EN

Stack Overflow用户
提问于 2012-10-12 07:47:52
回答 1查看 2.5K关注 0票数 0

在我的应用程序中,我从电话中获取联系人列表。我需要在联系人列表中实现上下文过滤/搜索机制。

过滤条件:按联系人姓名数字键上的字母(所有可能的组合)过滤!

当我输入的时候,每个新的号码列表都应该改变,只留下合适的联系人。

就像这里。

http://i.stack.imgur.com/IXZmJ.png

我输入了"253“和应用程序找到的结果。请帮我做这件事。

代码语言:javascript
运行
复制
private List<Contact> contacts = new ArrayList<Contact>();
private List<Contact> sortContacts = new ArrayList<Contact>();
int textlength = 0;
TextView textView;

private class CustomTextWatcher implements TextWatcher {

    public void onTextChanged(CharSequence s, int start, int before,
            int count) {
        textlength = textView.getText().length();

        for (int i = 0; i < contacts.size(); i++) {
            if (textlength <= contacts.get(i).getName().length()) {
                            // need help here
                                                                       }}}}
EN

回答 1

Stack Overflow用户

发布于 2012-10-12 07:52:05

您可以使用trieradix tree来获取具有特定前缀的所有字符串。

然而,请注意,在您的情况下-您在每次搜索中检查多个前缀,一个可能的解决方案是持有代表字符串的数字的trie,而trie的前导将指向它实际表示的字符串(可能不止一次)。

在查找数字时,使用来自前缀number的简单DFS来获取所有相关字符串。

如果名字列表变化不是很频繁,trie可能是个过头了。相反,您可以存储元组(number,string),其中number是表示数字,string是排序数组中的名称,并使用binary search获取带有所需前缀的第一个数字,并在找到后通过线性搜索返回所有名称。

但是请注意,在这种情况下插入一个新条目将是O(n),所以如果它经常发生-避免这个解决方案,因为它被认为是没有效率的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12850308

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档