如何在Set中搜索(使用比较器)

时间:2010-07-29 14:37:19

标签: java collections sorting set comparator

我想在一个Set中搜索,而不是手动迭代元素,但似乎没有一个方法可以做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 个答案:

答案 0 :(得分:1)

此处需要更多详细信息 - 您是否尝试按Set中包含的对象中的单个字段进行搜索?或者只是找到Set中的某个元素?

Set本身的想法,作为裸接口,不知道排序 - 你需要迭代每个元素。

但是,如果您将自己限制在SortedSet,其中有一个排序,您可以利用排序,但由于Set s不允许随机访问,仍需要迭代每个元素或了解有关该集合的更多信息,而不仅仅是Set

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

请记住,如果你所知道你要搜索的对象是保证它是一个集合,那么你无法保证在没有遍历每个元素的情况下搜索任何方法,就像这个contains()方法一样取决于您实际使用的集合实现的类型,可能会也可能不会。

<强>参考

答案 3 :(得分:0)

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