【发布时间】:2011-12-10 01:54:36
【问题描述】:
全部,
我想知道检查 List
举个例子:
List[
Set<Foo>[Foo_Key:A, Foo_Value:1][Foo_Key:B, Foo_Value:3][Foo_Key:C, Foo_Value:4]
Set<Foo>[Foo_Key:A, Foo_Value:1][Foo_Key:B, Foo_Value:2][Foo_Key:C, Foo_Value:4]
Set<Foo>[Foo_Key:A, Foo_Value:1][Foo_Key:B, Foo_Value:3][Foo_Key:C, Foo_Value:3]
]
我希望能够检查列表中是否存在新的 Set(例如:Set[Foo_Key:A, Foo_Value:1][Foo_Key:B, Foo_Value:3][Foo_Key:C, Foo_Value:4]) .
每个 Set 可以包含 1-20 个 Foo 对象。该列表可以包含 1-100,000 个集合。不保证 Foo 在每个 Set 中的顺序相同(因此必须以某种方式对它们进行预排序以获得正确的顺序,例如 TreeSet)
想法 1:将其转换为矩阵是否更有意义?每列将是 Foo_Key 并且每一行将包含 Foo_Value? 例如:
A B C
-----
1 3 4
1 2 4
1 3 3
然后查找包含新值的行?
想法 2:创建每个 Set 的哈希,然后将其与新 Set 的哈希进行比较是否更有意义?
有没有我没有想到的更有效的方法?
谢谢
【问题讨论】:
-
您的想法 2 是如果您使用 LinkedHashSet 而不是 List(并且只是称为 contains(newSet))会发生什么。它确实可能比 List.contains 调用更快,但您必须确保集合及其元素一旦添加到 LinkedHashSet,就永远不会被修改。