我如何改善
这一段代码?
给定问题陈述的单元测试用例是什么?


码:

    public class SlowDictionary {
        private final Map<String,String> dict = new HashMap<String,String>();
        public synchronized String translate (String word)
        throws IllegalArgumentException {
            if (!dict.containsKey(word)) {
                throw new IllegalArgumentException(word + " not found.");
            }
            return dict.get(word);
        }

        public synchronized void addToDictionary (String word, String translation)
            throws IllegalArgumentException {
            if (dict.containsKey(word)) {
                throw new IllegalArgumentException(word + " already exists.");
            }
            dict.put(word,translation);
        }

        public synchronized Set<String> getAllWords () {
            return dict.keySet();
        }
    }

最佳答案

您要做的第一件事就是摆脱所有同步的关键字。

最简单的方法是将dict声明为ConcurrentHashMap:

private final ConcurrentMap<String,String> dict = new ConcurrentHashMap<String,String>();


这样做,您可以立即删除翻译的同步部分,因此它看起来像:

 public String translate (String word) throws IllegalArgumentException { ..


这样做的原因是CCHM持有的有关最新阅读的合同。

最后,添加到字典可以如下所示:

 public void addToDictionary (String word, String translation) throws IllegalArgumentException {
            if (dict.putIfAbsent(word,translation)!=null) {
                throw new IllegalArgumentException(word + " already exists.");
            }
        }


还要从getAllWords中删除sync。

编辑:考虑到汤姆的评论。在这种“例外情况”中仔细检查可能不值得。如果案件没有引发例外,那将是适当的。

08-06 13:47