我想在一个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;
}
答案 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来搜索较低,较大或在给定限制之间的部分。