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

标签 android algorithm search android-contacts

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

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

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

喜欢这里。

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

我输入“253”,应用程序找到了 ALE。 请帮我做这件事。

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
                                                                       }}}}

最佳答案

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

但是请注意,在您的情况下 - 您在每次搜索中检查多个前缀,一个可能的解决方案是持有代表字符串的数字的 trie,并且 trie 的引导将指向它实际上的字符串代表(可能不止一次)。
查找数字时,使用前缀数字中的简单 DFS 来获取所有相关字符串。

如果名称列表变化不是太频繁,则 trie 可能有点矫枉过正。您可以改为存储元组 (number,string),其中 number 是代表数字,string 是排序数组中的名称,并使用 binary search获取具有所需前缀的第一个数字,并在找到后通过线性搜索返回所有名称。
但是请注意,在这种情况下插入一个新条目将是 O(n),因此如果它确实经常发生 - 请避免使用此解决方案,因为它预计效率不高。

关于android - 手机联系人android中的搜索算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12850308/

相关文章:

android - 如何取消像whatsapp这样的图片和视频上传

android - 使用 Phonegap 和相关内存限制创建离线 Android 应用程序

Android LocationManager 标准

java - 拆分二叉搜索树

algorithm - 将一组 3D 点映射到具有最小距离总和的另一组

android - 如何更改圆形进度条的颜色?

c# - 如何使用循环链表解决 Josephus Elimination

具有多个索引的 Azure 搜索

java - 搜索数组中的单词

java - A*(a star) 最短路径搜索算法