迭代具有 50000 或更多记录以匹配键的映射的有效方法

问题描述 投票:0回答:2

公共用户 getUserEntryFromIdKey(字符串 id){

    for (Map.Entry<Integer, User> entry : userMap.entrySet()) {
        if (entry.getKey().matches(id)) {
            return entry.getValue();
        }
    }
    return null;
}

迭代超过 50K 记录的地图值的有效方法。不希望 for 循环运行 50K 次来找到一个值。

java spring performance hashmap concurrenthashmap
2个回答
0
投票

假设需要使用正则表达式或一些复杂的条件来匹配键。在这种情况下,您应该考虑重新考虑键的结构,或者可能使用辅助数据结构根据可搜索条件对键进行索引。

否则就做

userMap.getOrDefault(Integer.parseInt(id), null);


0
投票

正如 @g00se 已经指出的,你有一个

Map
,你应该利用它的结构,并直接跳转到由它的键(它的
User
)映射的值(a
id
)。

您基本上将

Map
视为
List
,以
O(n)
的复杂度迭代其所有元素,然后找到所需的
User
。只需使用
get()
方法并返回与其 id 关联的
User

public User getUserEntryFromIdKey(String id) {
    return userMap.get(id);
}
© www.soinside.com 2019 - 2024. All rights reserved.