我有一个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
}
答案 0 :(得分:0)
通常,我们现有的TreeSet<Person>
不能用于按名称查找。树集将根据您为集合定义的内容进行组织。
通常,您需要一个单独的Map<String, Person>
来保存原始集中所有Person
个对象的映射。这需要保持集合和地图的步骤。
但是,如果树集的排序是名称和年龄的组合,并且名称提供主要排序,那么可以使用{{1}获得&#34;尾巴&#34;以给定名称开头的集合然后迭代尾部集,直到名称发生变化。
答案 1 :(得分:0)
TreeSet
根据Comparator
安排项目。
您可以首先按名称实施比较操作。