| Jive源码分析:tree树形数据结构 |
........ private long threadID; private DbForumFactory factory; //这里设置使用LongTree准备生成一个对象 private LongTree tree; /** * TreeWalker 构造函数 */ public DbTreeWalker(DbForumThread thread, DbForumFactory factory) { this.threadID = thread.getID(); this.factory = factory; ForumMessage root = thread.getRootMessage(); int numMessages = thread.getMessageCount(IGNORE_MODERATION_FILTER); // Create the tree, set the root.创建一个新的Tree tree = new LongTree(root.getID(), numMessages); // Now, build the rest of the tree.建立完整这个树 //到数据库中,将当前目录下 (当前Thread)所有数据装入这个Tree Connection con = null; PreparedStatement pstmt = null; try { con = ConnectionManager.getConnection(); pstmt = con.prepareStatement(GET_MESSAGES); pstmt.setLong(1, thread.getID()); ResultSet rs = pstmt.executeQuery(); while(rs.next()) { long messageID = rs.getLong(1); long parentMessageID = rs.getLong(2); //加入儿子 tree.addChild(parentMessageID, messageID); } } 。。。。。 } } ....... //可以很方便的得到一个帖子的父亲 public ForumMessage getParent(ForumMessage message) throws ForumMessageNotFoundException { ........ } //可以很方便的得到一个帖子的儿子 public ForumMessage getChild(ForumMessage message, int index) throws ForumMessageNotFoundException { ........... } Jive中使用Cache技术,保证了经常访问的那些Tree能够放置在内存中,这是另外篇幅需要研究的。 总之,我们找到了一套树形结构数据+关系数据库+面向对象语言三者结合的一种办法,这种办法无论从理论上 以及实用性上,都是值得我们在实践中借鉴的。 出处:www.jdon.com |