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

时间:2012-10-11 23:47:52

标签: 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
                                                                       }}}}

1 个答案:

答案 0 :(得分:3)

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

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

如果名单列表没有经常变化,那么特里可能是一种过度杀伤力。您可以改为存储元组(number,string),其中number是代表编号,string是排序数组中的名称,并使用binary search获取带有所需前缀的第一个数字,一旦找到,只需用线性搜索返回所有名称。
但请注意,在这种情况下插入新条目将为O(n),因此如果确实经常发生 - 请避免使用此解决方案,因为预计效率不高。