使用稀疏写入和多次读取来编写哈希映射的最佳方法

时间:2015-03-05 07:19:28

标签: java performance

我需要在Java中编写一个哈希映射,它将用于主要用于读取的线程。考虑客户端只写入一次哈希映射(最多只有10或15个条目)的情况,但密钥和值来自客户端。这意味着我事先不知道键/值对。一旦写完它们,它们会同时读取多次。

以下有效的方式更像下面的代码段:

public String getPS(String query) {
    //put into map if not present
    if(psMap.get(query) == null){
        synchronized (this) {
            if(psMap.get(query) == null){
                //test1 is just a sample  value
                psMap.put(query,"test1");
            }
        }
    }
    return psMap.get(query);

}

2 个答案:

答案 0 :(得分:4)

ConcurrentHashMap的实现假定最常见的操作是检索值,因此它已针对get操作进行了优化。它甚至还有putIfAbsent方法,所以你不必自己实现它。

答案 1 :(得分:0)

ConcurrentHashMap具有并发访问权和记住计算值的能力。注意:每个键只会调用一次。

public String getPS(String query) {
    //put into map a computed value if not present
    return psMap.computeIfAbsent(query, $ -> "test1");
}