gpt4 book ai didi

java - 实现 HashMap : Java 的高效方法

转载 作者:行者123 更新时间:2023-12-02 05:58:13 24 4
gpt4 key购买 nike

我有一个函数,我必须在其中发送对象的两种状态:

void functionA(MyObject objStateOff, MyObject objStateOn){
}

并且总是只有两种类型的状态:开和关但我希望将它们组合起来,而不是让这个函数有两个相同类型的参数。所以我想拥有一个 HashMap<Boolean, MyObject>.但由于这个 map 最多只包含两个条目,这似乎是一种资源浪费,因为我正在为 Android 开发。

那么,是否有更好的方法来传递这两个对象,而无需让两个对象使用 HashMap 或在函数签名中包含两个参数?

更新:我想看看是否有其他方法可以基本上改进以下内容:可读性、性能(尽管我认为这不会改变)和可维护性

谢谢。

最佳答案

我将创建一个包含两个 MyObject 字段的自定义类,以及每个字段的访问器。根据您的目标,这有几个很大的优势:

  • 可读性:访问器方法描述了每个对象的用途。 states.get(true),这是什么意思? states.getFooOnState(),这非常清楚地让我了解 foo 开启时的状态。
  • 可维护性:如果您需要这样做,添加新状态会容易得多;您只需向此类添加一个新字段即可。也许您需要一个 MyObject 来处理 foo 的状态未知/正在初始化的情况,或者您可能希望添加在 foo 打开或关闭时触发的事件处理程序。当前方法的一个缺点是,这些事情将通过您的签名进行级联:functionA 需要添加一个新参数,这意味着 functionB 调用 functionA 现在需要获取该额外参数(以便可以将其传递给 functionA),这意味着 functionC 需要获取它,依此类推。

对可读性问题的一个警告是,您将在使用这些 MyObject 的地方获得可读性,而不是在第一次设置它们的地方。在那里,您将创建一个新的 MyObjectState (或任何您命名的名称),并且构造函数看起来与您的 functionA 一样通用:

MyObjectState s = new MyObjectState(objStateOff, objStateOn);

可以通过为MyObjectState创建构建器来解决这个问题,但这可能有点过头了。

就性能而言,您不会比现有的更好。但从总体上看,自定义类将增加相当小的开销(在额外内存、GC Activity 等方面)。

关于java - 实现 HashMap<Boolean, Object> : Java 的高效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22878922/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com