您可能想看看Google Collections是否有满足您需求的东西,这样您就不必支持自己的地图。例如,参见MapMaker
private Map<Key, Graph> createMap() {
ConcurrentMap<Key, Graph> graphs = new MapMaker()
.concurrencyLevel(32)
.softKeys()
.weakValues()
.expiration(30, TimeUnit.MINUTES)
.makeComputingMap(
new Function<Key, Graph>() {
public Graph apply(Key key) {
return createExpensiveGraph(key);
}
});
return Collections.unmodifiableMap(graphs);
}
请注意,地图在构建后不会显得完全不可变,因为map.get(key)
使用以前看不见的键执行 a 会改变所看到的内容Map.entrySet()
如果您需要编写自定义 Map 实现并希望从一个好地方开始您的测试,Adam 建议使用 Google Collections 的MapInterfaceTest是一个很好的建议。