2010-10-20 78 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。

相关问题