2012-05-01 54 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'的理由。 –