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

Gáb*_*ani 3 java key hashmap

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

{
    3: "John",
    528: "Bob",
    712: "Sue"
}
Run Code Online (Sandbox Code Playgroud)

大多数客户端断开连接,所以这就是为什么我有很大的差距。如果我想添加一个新客户端,我需要一个密钥,显然_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;
}
Run Code Online (Sandbox Code Playgroud)

在某些情况下,这真的很慢。有没有更快或更专业的方法来获得 a 的最低自由键HashMap

Jon*_*eet 5

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

当然,如果确实需要,您可以始终同时维护 aHashMap a TreeSet,确保同时添加条目和删除条目。该TreeSet会只是作为一个有序集合的映射按键。