无法使用TreeSet的contains()方法

时间:2016-12-17 00:49:13

标签: java collections tree binary-tree binary-search-tree

我有一个TreeSet,其中元素是具有两个属性(Name和Age)的对象。每次我想搜索具有特定名称的对象时,我都必须使用增强的for循环或迭代器。

我无法使用contains()方法搜索具有特定名称的对象,因为该名称已在此对象中“封装”。

有没有办法克服这个问题?也就是说,一种利用log(n)时间复杂度的方法?

由于TreeSet中的所有元素都按名称排序,因此必须有一种我认为的方式。

我想要实现的一个例子:

contains()

想要使用的示例:

public Element search(String name) {
    // if some TreeSet element's name.equals(name), return the Element
}

2 个答案:

答案 0 :(得分:0)

通常,我们现有的TreeSet<Person>不能用于按名称查找。树集将根据您为集合定义的内容进行组织。

通常,您需要一个单独的Map<String, Person>来保存原始集中所有Person个对象的映射。这需要保持集合和地图的步骤。

但是,如果树集的排序是名称和年龄的组合,并且名称提供主要排序,那么可以使用{{1}获得&#34;尾巴&#34;以给定名称开头的集合然后迭代尾部集,直到名称发生变化。

答案 1 :(得分:0)

TreeSet根据Comparator安排项目。

您可以首先按名称实施比较操作。