【发布时间】:2020-02-23 10:33:48
【问题描述】:
我正在做一个项目,但对它的设计有些怀疑。 我怎样才能最好地设计以下问题(在 JAVA 中):
A 类具有以下属性:
- 像素哈希集,其中每个像素的 x,y 坐标和值 v 介于 0-1 之间。
- B 类的实例。
B类具有以下功能:
- 一个获取像素并返回其左邻居的函数。
当我在 A 类中时,我想对 A 中的每个像素使用 B.function,并且仅当它不存在时才将其添加到 HashSet 中。问题是我不想将 HashSet 发送给函数,如果它可能已经存在,那么从函数返回新的 Pixel 实例有多糟糕(这个函数将在许多像素上运行并且会创建许多未使用的实例像素)。
我还有什么其他选择?
【问题讨论】:
-
如果你有一个
HashSet<Pixel>,查看一个像素是否在集合中的唯一方法是创建另一个像素,所以除非你改变这个方面,否则你真的没有任何其他的B 类中函数的选项,因为即使您确实传入了 HashSet,它也必须创建Pixel对象。 -
谢谢,所以我想知道如果在每次调用 B.function 时,该函数都会创建 10 个我不会使用的实例,那么性能会有多糟糕?这样做可以接受吗?
-
你不认为 double 的二维数组能更好地表示这一点吗?
-
@ErwinBolwidt 在我的例子中,给定一个图像,我可能只需要在其中保存一些像素,所以我认为保存一个代表所有图像的二维数组可能是浪费的。
-
一张大小的图片有多少像素?为每个像素创建对象、存储 X 和 y 以及分配 HashSet 都会产生一定的开销。如果您的像素位于矩形区域,您只需要该区域的矩阵。如果您仍然需要 Hash 查找,以 Point(x 和 y)对象作为键、Double 作为值的 HashMap 是一种更自然的表示
标签: java oop design-patterns