我想用Java 表示线程注释。这看起来类似于在reddit.com上插入评论的方式
hello
hello
hello
hello
hello
hello
hello
如以上示例所示,响应以适当的缩进嵌套在HTML中,以反映其与先前注释的关系。
用Java表示这一点的有效方法是什么?
我认为某种树数据结构将是合适的。
但是,有没有一种特别有效的方法可以最大程度地减少树的遍历?
如果我对每条评论都进行投票,这将很重要。因为这样一来,在每次投票后都需要对树进行重新排序-这在计算上可能是昂贵的操作。
顺便说一句,如果有人知道Java的开放源代码现有实现,那也将有所帮助。
我会使用链接列表的级别。
message1
message2
message3
message4
message5
message6
message7
每个节点都有一个指向其节点的指针:
- forward sibling (2->5, 3->4, 5->6, 1/4/6/7->NULL).
- backward sibling (4->3, 5->2, 6->5, 1/2/3/7->NULL).
- first child (1->2, 2->3, 6->7, 3/4/5/7->NULL).
- parent (2->1, 3->2, 4->2, 5->1, 6->1, 7->6, 1->NULL).
在每个级别内,邮件将按投票数(或您要使用的任何其他评分)在列表中排序。
这将为您提供最大的灵活性,您可以通过移动message2
父级和该级别的链接来移动整个子树(例如)。
例如,say message6
获得大量票数,使其比更为流行message5
。所做的更改是(调整下一个和上一个同级指针):
message2 -> message6
message6 -> message5
message5 -> NULL
。要得到:
message1
message2
message3
message4
message6
message7
message5
如果持续进行,直到获得的票数超过message2
,则会发生以下情况:
message6 -> message2
message2 -> message5
并且将的第一个孩子指针message1
设置为message6
(它是message2
),仍然相对容易实现:
message1
message6
message7
message2
message3
message4
message5
仅当分数变化导致消息变得大于其上级同级或小于其下级同级时,才需要进行重新排序。每次得分更改后,您都无需重新排序。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句