昨天晚上看了關(guān)于“都市信息網(wǎng)”項目開發(fā)視頻,給人總體感覺差強人意,學(xué)到了一些知識,記錄如下:
1、頁面結(jié)構(gòu):
在頁面結(jié)構(gòu)的定義上,將頁面分成多部分,例如頁頭,頁尾,左側(cè)欄和右主欄。在每個欄中導(dǎo)入需要的JSP文件。
2、關(guān)于controller:
要讓controller實現(xiàn)RequestAware和ResponseAware。然后使用繼承。
3、關(guān)于DAO層的設(shè)計
遺憾的是都市信息在DAO層的設(shè)計上,是一個敗筆。在controller里面使用sql語句。不利于各個層次的獨立。
4、關(guān)于TreeMap
在該項目中,使用map多使用TreeMap,查一下TreeMap是什么東西吧:
A Red-Black tree based NavigableMap
implementation. The map is sorted according to the natural ordering of its keys, or by aComparator
provided at map creation time, depending on which constructor is used.
哦,是一個基于紅黑樹的Map。
什么是紅黑樹。
紅黑樹(Red-Black Tree)是二叉搜索樹(Binary Search Tree)的一種改進。我們知道二叉搜索樹在最壞的情況下可能會變成一個鏈表(當(dāng)所有節(jié)點按從小到大的順序依次插入后)。而紅黑樹在每一次插入或刪除節(jié)點之后都會花O(log N)的時間來對樹的結(jié)構(gòu)作修改,以保持樹的平衡。也就是說,紅黑樹的查找方法與二叉搜索樹完全一樣;插入和刪除節(jié)點的的方法前半部分節(jié)與二叉搜索樹完全一樣,而后半部分添加了一些修改樹的結(jié)構(gòu)的操作。
紅黑樹的每個節(jié)點上的屬性除了有一個key、3個指針:parent、lchild、rchild以外,還多了一個屬性:color。它只能是兩種顏色:紅或黑。而紅黑樹除了具有二叉搜索樹的所有性質(zhì)之外,還具有以下4點性質(zhì):
1. 根節(jié)點是黑色的。
2. 空節(jié)點是黑色的(紅黑樹中,根節(jié)點的parent以及所有葉節(jié)點lchild、rchild都不指向NULL,而是指向一個定義好的空節(jié)點)。
3. 紅色節(jié)點的父、左子、右子節(jié)點都是黑色。
4. 在任何一棵子樹中,每一條從根節(jié)點向下走到空節(jié)點的路徑上包含的黑色節(jié)點數(shù)量都相同。
有了這幾條規(guī)則,就可以保證整棵樹的平衡,也就等于保證了搜索的時間為O(log N)。
但是在插入、刪除節(jié)點后,就有可能破壞了紅黑樹的性質(zhì)。所以我們要做一些操作來把整棵樹修補好。下面我就來介紹一下。