java树形结构 算法
最近看到一个有意思的树形结构,为每个节点添加了lft
和
rgt
两个属性。这样查找该节点的子节点、
查找该节点所有父节点,就不用去递归查询,只需要用
between
、
and
语句就可以实现。下面以创建一个栏目树为例,以下是我的理解。
一般来讲,我们创建栏目树的时候,大多只需要一个外键parentid
来区分该节点属于哪个父节点。数据库的设计如下图:
这样一来,
1.查找该节点的所有子节点,则需要采用
sql
的递归语句:
Sql代码 < type="application/x-shockwave-flash" width="14" height="15" src="http://www.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" src="http://www.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=select%20*%20from%20tableName%20connect%20by%20prior%20id%3Dsj_parent_id%20start%20with%20%20id%3D1" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" width="14" height="15">
select
*
from
tableName
connect
by
prior
id=sj_parent_id start
with
id=1
select * from tableName connect by prior id=sj_parent_id start with id=1
(
oracle 写法,
mysql
目前不支持,如果
mysql
想查找树形,可以利用存储过程
).
2.查找该节点的父节点
的
sql
递归语
句:
Sql代码 < type="application/x-shockwave-flash" width="14" height="15" src="http://www.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" src="http://www.javaeye.com/javascripts/syntaxhighlighter/clipboard_new.swf" flashvars="clipboard=select%20*%20from%20tableName%20connect%20by%20prior%20sj_parent_id%20%3Did%20start%20with%20%20id%3D1" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" width="14" height="15">
select
*
from
tableName
connect
by
prior
sj_parent_id =id start
with
id=1
select * from tableName c
相关文档:
------------------------------------------------------------------------------------------------
这几天主要是狂看源程序,在弥补了一些以前知识空白的同时,也学会了不少新的知识(比如 NIO),或者称为新技术吧。
线程池就是其中之一,一提到线程,我们会想到以前《操作系统》的生产者与消费者,信号量,同步控制 ......
this
对象本身。public class ThisTest {
ThisTest tTest;
public ThisTest(){
tTest = this;
}
public void test(){
System.out.println(this);
}
public static void main(String arg[]){
new ThisTest().test();
}
}
成员方法引用。
成员变量引用。public class ThisTest {
String name ......
请参见上一篇文章,登录MSN协议
具体Java实现:
命令序列:<<代表发送,>>代表结果
1.连接DS(Dispatcher Server),得到NS(Notification Server)
<<VER 1 MSNP18 CVR0
>>VER 1 MSNP18
<<CVR 2 0x0804 winnt 5.1 i386 MSNMSGR 14.0.8089.0726 msmsgs yourAccount
>>CVR 2 14.0.8089 ......
上一篇文章中介绍了怎样利用MSNP登录MSN,在登录后便可取联系人了,很简单。
参考文章:
http://msnpiki.msnfanatic.com/index.php/MSNP13:Contact_List
http://msnpiki.msnfanatic.com/index.php/MSNP15:TicketTokens
在登录后,可以得到一个contacts.msn.com的ticketToken,这可用于后续的验证
一种方法是加入一个MS ......
类是广泛的概念,表示一个有共同性质的群体。如:人类。
代码:
// 声明一个类“Human”
class Human{
priv ......