2010-10-20 70 views
1

我正在使用Android 2.1 SDK,應用程序從Sqlite數據庫中讀取一個有兩列,一個ID和一個字符串的表。如何在使用相應的值時獲取密鑰?

我讀了這個入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; 
} 

我的問題正在意識到cpu週期在Android,電池/ cpu時間方面被咀嚼,尋找HashMap中的值,這可能被看作是cpu丟失的潛在週期。

有沒有更容易和更有效的方法來做到這一點,而不是迭代?

推理是,我可以在家裏的ID,並直接從表中刪除記錄,甚至更新它。

+0

馬克和邁克爾Borgwardt有很好的有效點,並在哪個答案撕裂選出最佳答案...... – t0mm13b 2010-10-20 14:31:39

回答

2

嗯...它看起來像字符串應該是關鍵,而身份證的價值。它假定字符串是唯一的,但你的代碼也是如此。

或者,您的列表不能在無形狀態下保留與條目對應的ID嗎?這是通常的做法(例如在Swing或HTML選擇中)。

+0

謝謝! :)應該有這樣的想法,但遭受腦活動! – t0mm13b 2010-10-20 15:24:25

1

實際上,避免迭代的唯一方法是保持兩個HashMap(即支付內存開銷),其中一個HashMap與第一個HashMap相反。您可以在創建正向查找HashMap時創建反向查找HashMap,而不必循環兩次數據。這應該會給你兩個方向上的低定時訪問。

0

如果您使用的是Adapter,則可以使用getItemID()方法訪問該ID。

相關問題