我知道您可以在樹中找到第一個和最後一個元素。如果我想知道第二個或第三個元素沒有迭代是什麼?或者,更可取的是,給定一個元素,找出它在樹中的排名。如何查找TreeSet中元素的排名
感謝
編輯:我認爲你可以使用tailset,即做到這一點。比較原始集合的大小和尾部集合的大小。尾部效率如何?
我知道您可以在樹中找到第一個和最後一個元素。如果我想知道第二個或第三個元素沒有迭代是什麼?或者,更可取的是,給定一個元素,找出它在樹中的排名。如何查找TreeSet中元素的排名
感謝
編輯:我認爲你可以使用tailset,即做到這一點。比較原始集合的大小和尾部集合的大小。尾部效率如何?
根據Sun JDK6實現的源代碼,tailSet(E).size()
遍歷尾集並對元素進行計數,因此該調用爲O(尾集大小)。
除了迭代器以外沒有別的辦法。
編輯:
試試這個:
treeSet.higher(treeSet.first());
這應該在TreeSet中給予第二個元素。我不確定這是否更優化,然後使用Iterator。
TreeSet
沒有提供有效的排名方法。我懷疑(你可以通過查看它的來源來確認)TreeSet
甚至不需要在O(日誌)中執行任何額外的信息位(即每個節點的左右子樹上的元素的計數) (n))時間。因此,似乎沒有任何快速找到TreeSet
元素排名的方法。
如果你真的需要它,你可以實現你自己的SortedSet
一個平衡二叉搜索樹,它允許這樣的查詢或修改TreeSet
實現創建它擴充到允許此類查詢一個新的實現。有關如何實際完成此操作的更多詳細信息,請參閱CLRS中增強數據結構一章。
使用tailSet怎麼樣? – JPC 2010-11-06 18:14:33
如果我知道tailSet的大小,與整個集合的大小相比,我可以找到這種方式的權利?但tailSet的效率如何 – JPC 2010-11-06 18:14:57