android手机联系人搜索算法
在我的应用程序中,我从手机中获取联系人列表。 我需要通过联系人列表实现上下文过滤/搜索机制 过滤条件: 根据数字键上的字母(所有可能的组合)按联系人姓名过滤 当我输入每个新的号码列表时,应该更改,只留下合适的联系人 就像这里 我输入“253”,应用程序就会找到ALE。 请帮我做这个android手机联系人搜索算法,android,algorithm,search,android-contacts,Android,Algorithm,Search,Android Contacts,在我的应用程序中,我从手机中获取联系人列表。 我需要通过联系人列表实现上下文过滤/搜索机制 过滤条件: 根据数字键上的字母(所有可能的组合)按联系人姓名过滤 当我输入每个新的号码列表时,应该更改,只留下合适的联系人 就像这里 我输入“253”,应用程序就会找到ALE。 请帮我做这个 private List<Contact> contacts = new ArrayList<Contact>(); private List<Contact> sortCont
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
}}}}
private List contacts=new ArrayList();
private List sortContacts=new ArrayList();
int textlength=0;
文本视图文本视图;
私有类CustomTextWatcher实现TextWatcher{
public void onTextChanged(字符序列,int start,int before,
整数计数){
textlength=textView.getText().length();
对于(int i=0;i
但是,请注意,在您的情况下,您在每次搜索中检查许多前缀,一个可能的解决方案是保留表示字符串的数字的trie,trie的前导将指向它实际表示的字符串(可能不止一次)。
查找数字时,请使用前缀数字中的简单字符来获取所有相关字符串
如果名称列表没有经常更改,则trie可能是一种过度使用。您可以改为存储元组(数字、字符串)
其中,number
是表示数字的,而string
是排序数组中的名称,用于获取带有所需前缀的第一个数字,并在找到后通过线性搜索返回所有名称。
但是请注意,在这种情况下插入一个新条目将是O(n)
,因此如果经常发生这种情况,请避免使用这种解决方案,因为它预计不会有效率。您可以使用a或a来获取具有特定perfix的所有字符串
但是,请注意,在您的情况下,您在每次搜索中检查许多前缀,一个可能的解决方案是保留表示字符串的数字的trie,trie的前导将指向它实际表示的字符串(可能不止一次)。
查找数字时,请使用前缀数字中的简单字符来获取所有相关字符串
如果名称列表没有经常更改,则trie可能是一种过度使用。您可以改为存储元组(数字、字符串)
其中,number
是表示数字的,而string
是排序数组中的名称,用于获取带有所需前缀的第一个数字,并在找到后通过线性搜索返回所有名称。
但是请注意,在这种情况下插入一个新条目将是O(n)
,因此,如果这种情况经常发生,请避免使用这种解决方案,因为它预计不会有效率