计算所有在Hashmap中添加键值的调用

在浏览 HashMap 实现和一些教程时,我想到了这个问题。但不知道如何解决这个问题。所以如果你们能帮助我,就在这里发帖。我想记录在 Map 中添加每个键值对的所有调用。它也应该计算对 put、putAll 和 putIfAbsent 所有方法的调用。

回答

主要有两种选择,

使用继承

  1. 假设Map您要跟踪的实现允许扩展,然后创建一个子类并覆盖所需的方法。
  2. 在重写的方法中,执行自定义逻辑(计数),然后调用super.基类的方法(实际方法)

这种方法的主要优点instanceofgenerics编译器行为将是有利的。

这种方法有一个主要问题,即您需要扩展每个Map需要支持的类。这将导致类的爆炸。

使用组合

  1. 添加一个实现 Map 的新类(每个顶级相关类型)
  2. 有一个实际 Map 的参考变量
  3. 从 Map 接口实现方法
  4. 在实现中,做你的追踪操作,调用引用变量指向的地图

这种方法的主要优点是,很少有新的类。

这种行为的缺点是instanceofgeneric用户预期的类型可能无法正常工作。

建议

  1. 如果你打算在一些大型应用程序中使用它,那么讨论更多关于未来可能的用例,并将 Map 创建部分抽象为一些工厂方法甚至工厂。这将允许您封装工厂中的实现细节。
  2. 或者尝试使用方法拦截器的某种方式。尽管这会略微增加延迟,但这不需要客户端进行太多更改,并且也避免了维护并行的Map实现层次结构。
  3. 如果使用拦截器,我不知道您可以控制的详细程度。同样,这也将是复杂的。
  4. 学习这些技术是好的。请不要在生产代码中使用它们,除非这是唯一可能的选择。

笔记

  1. count准确定义含义
  2. 是否只计算来自该类用户的调用?
  3. 或者,甚至可以计算此类中出现的调用(例如add调用get以查找存在)?

以上是计算所有在Hashmap中添加键值的调用的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>