我需要一个多线程Map对象用于我的Web服务器的缓存,我需要有空键.
HashMap允许我使用null键,但ConcurrentHashMap不允许.我尝试使用Collections.synchronizedMap(new HashMap())创建HashMap的同步版本,但它也不接受null键.
有没有我可以使用的替代方案,而不必实现某种方式来包装空键?
解决方法:
Collections.synchronizedMap
返回的地图支持您提供的地图的所有功能.如果你给它一个HashMap,它支持null键(也是空值,你说“……我需要”null“键值……”可以任何方式读取).是什么让你觉得它没有?
这可以按预期工作,例如:
import java.util.*;
public class MapTest
{
public static final void main(String[] args)
{
Map map;
try
{
map = Collections.synchronizedMap(new HashMap());
map.put("one", "a");
System.out.println("Size = " + map.size());
map.put(null, "b");
System.out.println("Size = " + map.size());
System.out.println("map.get(null) = " + map.get(null));
}
catch (Exception ex)
{
System.out.println("Exception: " + ex.getMessage());
ex.printStackTrace(System.out);
}
System.exit(0);
}
}
输出:
Size = 1 Size = 2 map.get(null) = b