我使用的是Android 2.1 SDK,该应用程序从Sqlite数据库中读取,该表包含两列,一个id和一个字符串。
我在这里读到HashMap<Long, String>
,它的值部分显示在List中,现在,我希望获得键值,所以我编写了这个简单的例程:
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,电池/ CPU时间,寻找HashMap
中的值时,会发现cpu周期被咀嚼,这可能被视为cpu丢失的潜在周期。 / p>
是否有一种更简单,更有效的方法来代替迭代?
原因是我可以在家里找到id,直接从表中删除记录甚至更新它。
答案 0 :(得分:2)
嗯......看起来字符串应该是键,而id是值。假设字符串是唯一的,但代码也是如此。
或者,您的列表不能无形地保留与条目对应的ID吗?这就是你通常的做法(例如在Swing或HTML选择中)。
答案 1 :(得分:1)
实际上,避免必须迭代的唯一方法是保留两个HashMaps(即支付内存成本),其中一个HashMap与第一个相反。您可以在创建正向查找HashMap时创建反向查找HashMap,而无需两次遍历数据。这应该可以让你在两个方向上进行低时间访问。
答案 2 :(得分:0)
如果您使用Adapter
,则可以使用getItemID()
方法访问该ID。