【问题标题】:Efficient way of implementing a Custom LinkedHashMap实现自定义 LinkedHashMap 的有效方法
【发布时间】:2016-07-13 07:08:28
【问题描述】:

我想实现一个自定义的LinkedHashMap,它有更多的方法/一些与LinkedHashMap 不同。我正在考虑通过LinkedHashMap 来实现它并为我想要的任何东西更改实现,其余的只需调用LHM 中的方法。

这样有效吗?比如:

public class CustomLHM<K, V> implements Map<K, V>{

    private final HashMap<K, V> entries;

    public CustomLHM() {
        entries = new LinkedHashMap<K, V>();
    }

对于像containsKeycontainsValue 这样的方法,我只需要返回entrys.containsKey(key),所以基本上只是从已经实现的java 调用LinkedHashMap 中的方法。我的问题是......有没有更好的方法来做到这一点?一种更有效的实施方式?

如果我自己使用基本结构(如 LHM 的实际实现)来实现它会更有效吗?

【问题讨论】:

  • 为什么不扩展 LinkedHashMap&lt;K,V&gt;
  • @JimGarrison 打败了我 :-)
  • 我只能通过 Map 接口实现,所以我无法更改定义
  • @NemanjaT 肯定 implements Map&lt;K, V&gt; 隐含在 extends LinkedHashMap&lt;K, V&gt; 中?
  • 如果你想让Map 方法做一些不同的事情,你应该知道Liskov Substitution Principle。基本上,它声明任何是 Map 的东西都应该始终完全按照 Map 应该做的事情来做。如果您不想这样做,那么您的自定义类可以在内部使用 Map 而实际上本身不是 Map

标签: java performance dictionary


【解决方案1】:

这就是 delegate 模式,将所有调用委托给一个字段。

提示:

如果 IDE 无法为您执行此操作,请先覆盖,然后调用 IDE 的覆盖所有方法,替换为“super”。带有“条目”。

效率并不是真正的问题,尤其是使用 JIT 编译器。

即使在最新的 java 编译器中 HashMap 也得到了改进(我相信带有树集的桶),我会避免自己实现需要生产质量稳定性的东西。或者更好:不需要维护。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-07
    • 1970-01-01
    • 1970-01-01
    • 2016-03-26
    • 2012-09-12
    • 1970-01-01
    • 2011-05-30
    • 1970-01-01
    相关资源
    最近更新 更多