【问题标题】:How to get the key when a corresponding value is used instead?当使用相应的值时如何获取密钥?
【发布时间】:2010-10-20 14:21:50
【问题描述】:

我使用的是 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;
}

我的问题是,在寻找HashMap 中的值时,我意识到 CPU 周期在 Android、电池/cpu 时间方面被破坏了,这可能被视为 CPU 丢失的潜在周期。

有没有比迭代更简单、更有效的方法?

理由是我可以在id上找到,直接从表中删除记录,甚至更新它。

【问题讨论】:

  • Mark 和 Michael Borgwardt 都有很好的有效点,并且在选择哪个答案作为最佳答案时感到困惑....

标签: java android collections


【解决方案1】:

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

或者,您的列表不能隐藏对应于条目的 ID 吗?这就是您通常的做法(例如,在 Swing 或 HTML 选择中)。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-10
        • 2017-10-01
        • 2013-05-23
        • 2018-11-29
        • 2021-12-26
        • 1970-01-01
        • 1970-01-01
        • 2017-05-09
        相关资源
        最近更新 更多