Как получить ключ, когда вместо него используется соответствующее значение? - PullRequest
1 голос
/ 20 октября 2010

Я использую Android 2.1 SDK, приложение читает из базы данных Sqlite, таблицы с двумя столбцами, идентификатором и строкой.

Я читаю это в HashMap<Long, String>, значениеего часть отображается в списке, теперь я хочу получить значение ключа, поэтому я подготовил эту простую процедуру:

private Map.Entry<Long, String> getEntry(String sValue){
    for (Iterator<Map.Entry<Long, String>> itMap = this.dbMap.entrySet().iterator(); itMap.hasNext();) {
        Map.Entry<Long, String> curr = itMap.next();
        if (curr.getValue().equalsIgnoreCase(sValue)) return curr;
    }
    return null;
}

Моя проблема заключается в том, чтобы осознавать, что циклы процессора разжевываются в отношенииAndroid, время работы от батареи / процессора, в поиске значения в HashMap, которое можно рассматривать как потенциальные циклы потери процессора.

Есть ли более простой и эффективный способ сделать это вместо итерации?

Причина в том, что я могу найти идентификатор и напрямую удалить запись из таблицы или даже обновить ее.

Ответы [ 3 ]

2 голосов
/ 20 октября 2010

Гм ... похоже, что строка должна быть ключом, а id - значением. Предполагается, что строки уникальны, но ваш код тоже.

Или же в вашем списке не может быть идентификатора, который соответствует записи вокруг невидимо? Так вы обычно делаете (например, в Swing или в HTML-выделении).

1 голос
/ 20 октября 2010

Реально, единственный способ избежать перебора - сохранить два HashMaps (т.е. оплатить стоимость памяти), где один HashMap является обратным первому.Вы можете создать HashMap с обратным поиском, когда создаете HashMap с прямым просмотром, без необходимости повторять данные дважды.Это должно дать вам низкий доступ к постоянному времени в обоих направлениях.

0 голосов
/ 20 октября 2010

Если вы используете Adapter, вы можете получить доступ к идентификатору, используя метод getItemID().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...