2012-05-01 106 views
2

我正在尝试在TreeSet中搜索具有特定regNumber的成员。然而,regNumber与TreeSet中的元素的顺序没有任何关系,它们按最后/名字排序。在TreeSet中搜索特定元素

现在我试图做的方式是迭代TreeSet中的所有元素,并返回匹配我正在寻找的regNumber的元素。这是一种好的做法,还是效率太低?

public class Members implements Comperable <Members> { 

private String firstName; 
private String lastName; 
private int regNumber; 

} 

PS在TreeSet中的元素必须由去年/名字保持有序

+0

这不是一个好的做法,但如果所有这些都是你的要求,你不能做任何其他的事情。 –

+1

您的问题引发了您打算如何使用集合的更多问题。特别是,你为什么使用TreeSet?如果你想找到具有特定regNumber的成员,为什么不把它们放在地图中(假设regNumber是唯一的)? – amaidment

回答

8

这一事实,你是按名称索引,然后通过regNumber搜索是指从视图的regNumber你有一点一个无序的项目集合。因此,对所有项目进行线性搜索都无法做得更好。

如果你想要更好的东西,你可以使用regNumber作为一个哈希表(HashMap或其他)的关键,并有原来的Member对象值的引用。这样,您可以更高效地搜索,但需要花费更多空间。

+1

+1使用regNumber作为散列键。如果您需要通过reg或名称查找,请考虑使用双向映射(或两个单独的hashmaps)。 –

+0

或'TreeMap',如果有使用'TreeSet'的理由。 –