我希望这个问题足够具体,可以被认为适合 StackOverflow。我检查了常见问题解答,我认为这是合格的,因为它是特定的并且与编程相关。
我正在用 Java 实现一个复杂的数据挖掘算法(FP-growth)。该算法的一些初始阶段要求我扫描一个大型数据库并保持对找到的每个项目类型的运行计数。这似乎非常适合Hashbag
界面。我在 Apache Commons 中找到了一个似乎对我有用的。
所以现在,我的 HashBag 充满了 [itemType, count] 条目(对)。稍后在算法中,我需要对这些对执行大量类似列表的操作。在某些情况下,我必须按 itemType 对集合进行排序。在其他情况下,我必须按计数排序。这似乎非常适合List
界面。
我的结论是我必须将我的 Hasbag 转换为列表。然而不知何故,它感觉很脏,就像是在浪费空间和时间。有没有更聪明的方法来做到这一点,或者这是一个常见的情况,有一个编程问题,你必须在不同的时间以不同的方式对待你的集合,而转换是必要的邪恶?
一种替代方法是制作我自己的界面,它确实是一个列表,但允许“袋式”添加。每次我想添加一些东西时,我都必须保持列表排序并使用自定义比较器执行二进制搜索。构建该集合可能比构建一个 Hashbag 需要更长的时间,但我会在最后节省转换步骤。关于哪个更可取的任何想法?
谢谢!