确定Java HashMap中最低可用密钥的最快方法?

时间:2013-08-20 21:18:43

标签: java hashmap key

想象一下这样的情况: 我有一个HashMap<Integer, String>,我在其中存储连接的客户端。它是HashMap,因为顺序无关紧要,我需要速度。它看起来像这样:

{
    3: "John",
    528: "Bob",
    712: "Sue"
}

大多数客户端断开连接,所以这就是我有很大差距的原因。 如果我想添加一个新客户端,我需要一个密钥,显然使用_map.size()来获取密钥是不正确的。

所以,目前我使用这个函数来获得最低可用密钥:

private int lowestAvailableKey(HashMap<?, ?> _map) {
    if (_map.isEmpty() == false) {
        for (int i = 0; i <= _map.size(); i++) {
            if (_map.containsKey(i) == false) {
                return i;
            }
        }
    }

    return 0;
}

在某些情况下,这真的很慢。 是否有更快或更专业的方法来获得HashMap的最低免费密钥?

1 个答案:

答案 0 :(得分:4)

使用HashMap的任何理由?如果您使用了TreeMap,则会自动按键排序地图。是的,你最终得到O(log n)访问而不是O(1),但这是最明显的方法。

当然,您可以始终同时保留HashMap 一个TreeSet,如果您确实需要,请确保添加条目并从两者中删除条目。 TreeSet只会作为地图的一组有序键。