如何在使用相应的值时获取密钥?

时间:2010-10-20 14:21:51

标签: java android collections

我使用的是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,直接从表中删除记录甚至更新它。

3 个答案:

答案 0 :(得分:2)

嗯......看起来字符串应该是键,而id是值。假设字符串是唯一的,但代码也是如此。

或者,您的列表不能无形地保留与条目对应的ID吗?这就是你通常的做法(例如在Swing或HTML选择中)。

答案 1 :(得分:1)

实际上,避免必须迭代的唯一方法是保留两个HashMaps(即支付内存成本),其中一个HashMap与第一个相反。您可以在创建正向查找HashMap时创建反向查找HashMap,而无需两次遍历数据。这应该可以让你在两个方向上进行低时间访问。

答案 2 :(得分:0)

如果您使用Adapter,则可以使用getItemID()方法访问该ID。