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

相关文章:

  • 2021-04-16
  • 2022-12-23
  • 2021-05-19
  • 2022-12-23
  • 2021-03-28
  • 2023-03-06
  • 2021-09-07
  • 2022-01-07
猜你喜欢
  • 2021-12-02
  • 2021-05-21
  • 2022-12-23
  • 2021-09-27
  • 2022-12-23
  • 2021-12-01
  • 2022-02-02
相关资源
相似解决方案