0

私のアプリケーションでは、電話から連絡先のリストを取得します。連絡先のリストを介してコンテキスト フィルター/検索メカニズムを実装する必要があります。

フィルター条件: 数字キーにある文字に従って、連絡先名でフィルター処理します (すべての可能な組み合わせ)。

新しい番号リストを入力するたびに、適切な連絡先のみを残して変更する必要があります。

ここみたいに。

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

1 に答える 1

3

トライまたは基数ツリーを使用して、特定のパーフィックスを持つすべての文字列を取得できます。

ただし、あなたのケースでは、各検索で多数のプレフィックスをチェックしていることに注意してください。考えられる解決策は、文字列を表す数字のトライを保持することであり、トライの先頭は実際に表す文字列を指します (そこに2回以上ある可能性があります)。
番号を探すときは、プレフィックス番号から単純なDFSを使用して、関連するすべての文字列を取得します。

名前のリストがあまり頻繁に変更されない場合、トライはやり過ぎかもしれません。代わりに、 が代表番号で(number,string)が名前であるタプルをソート済み配列に格納し、二分探索を使用して必要な接頭辞を付けた最初の番号を取得し、見つかったら線形探索ですべての名前を返すだけです。 ただし、この場合に新しいエントリを挿入すると.numberstring
O(n)

于 2012-10-11T23:52:05.353 に答える