1

我想在一个集合中搜索而不手动迭代这些元素,但似乎没有一种方法可以执行 Collections.search(myset, target, new ComparatorThing())。我没有看到什么吗?

谢谢。

编辑:

  • 我正在寻找元素的自然顺序之外的另一个领域。
  • 作为手动解决方法,我使用了以下静态方法。应该没问题,因为无论如何您都不能使用比较器中的自定义字段对另一个进行任何假设。
public static  T search(final Set set, final T searchEntry, final Comparator comparator) {
    for (final T entry : set) {
        if (comparator.compare(entry, searchEntry) == 0) {
            return entry;
        }
    }

    return null;
}
4

4 回答 4

1

此处需要更多详细信息 - 您是否尝试通过包含在Set? 或者只是在Set?

aSet本身的想法,作为裸接口,没有排序的想法——你需要遍历每个元素。

但是,如果您将自己限制为SortedSet,其中有一个排序,您可能会利用排序,但由于Sets 不允许随机访问,您仍然必须遍历每个元素或了解有关的更多信息集合不仅仅是它是一个Set

您能否详细说明您的算法以及您要完成的工作?

a 可能Set不是表示要“搜索”的数据的理想方式。

于 2010-07-29T14:41:24.107 回答
1

看看http://commons.apache.org/collections/它提供了例如:public static java.util.Set SetUtils.predicatedSet(set, predicate)

于 2010-07-29T15:39:34.353 回答
0

尝试contains(Object o),从Collection界面。Set 接口扩展了 Collection,因此所有集合都需要实现 Collection 方法。

请记住,如果您只知道要搜索的对象是一个集合,那么您不能保证有任何方法可以在不迭代每个元素的情况下进行搜索,因为此contains()方法可能会或可能不会做取决于什么您实际使用的集合实现类型。

参考

于 2010-07-29T14:41:21.407 回答
0

TreeSet 有一些可能有用的方法,例如ceiling搜索大于或等于搜索键的下一个元素,floor以获取下一个较低的元素。还有 headSet、tailSet 和 subSet 来搜索集合中更低、更大或在给定限制之间的部分。

于 2010-07-29T15:12:20.497 回答