JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java 新手區 » 基本API  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友    訂閱主題
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 請問 ConcurrentNavigableMap 有辦法只搜尋某一段資料嗎?
jimwayne





發文: 220
積分: 0
於 2012-10-15 17:02 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
小弟在開發專案時,使用了 JDBM3 這個開源的 B+tree implementation
在完全不改它的原始碼的情況下,用它建出來的 B+tree 是實作 ConcurrentNavigableMap 介面
目前小弟的需求是要利用 B+tree 建出來的索引,找到某個在 tree 裡面的 node
然後從該 node 往後 traverse 直到 key 不滿足特定條件為止
把中間所有 traverse 過的 node 列表全部回傳。
但小弟不知道在 ConcurrentNavigableMap 介面之下,要如何達成這樣的需求?

在 Google 時有看到有人是說可以用 entrySet() 把所有 Entry 列舉出來(Efficient way to traverse SortedMap backwards
但是如此一來,列舉時應該就會掃過整個 B+tree 所有的 node
然後列舉出來要找出我要的那一部分,可能又要再掃一次~這樣在 node 數目很多時效率可能會比較差
想請問在使用 ConcurrentNavigableMap 的情況下,有沒有辦法有效率地達成小弟上述的這種需求呢?

註:在 JDBM3 的 BTree class 描述中,有以下這段文字:
The B+Tree allows traversing the keys in forward and reverse order using a TupleBrowser obtained from the browse() methods. But it is better to use <code>BTreeMap</code> wrapper which implements <code>SortedMap</code> interface

看起來他們也建議要透過 SortedMap 提供的方法去進行 traverse,但小弟不知道該怎麼做 @@
而之所以不用它說的 TupleBrowser 和 browse(),是因為它把 BTree 和 TupleBrowser 兩個 class 都定義為 default
小弟的專案程式放在不同的 package 底下時無法存取到那些 class ~@@


jimwayne edited on 2012-10-15 17:21
reply to postreply to post
Java 工作者,但仍然是個初心者.....
話題樹型展開
人氣 標題 作者 字數 發文時間
695 請問 ConcurrentNavigableMap 有辦法只搜尋某一段資料嗎? jimwayne 1133 2012-10-15 17:02
» JWorld@TW »  Java 新手區 » 基本API

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8