MySQL replace into那些隱藏的風險
阿新 • • 發佈:2020-11-28
1.紅黑樹
1.1概述【理解】
-
紅黑樹的特點
-
平衡二叉B樹
-
每一個節點可以是紅或者黑
-
紅黑樹不是高度平衡的,它的平衡是通過"自己的紅黑規則"進行實現的
-
-
紅黑樹的紅黑規則有哪些
-
每一個節點或是紅色的,或者是黑色的
-
根節點必須是黑色
-
如果一個節點沒有子節點或者父節點,則該節點相應的指標屬性值為Nil,這些Nil視為葉節點,每個葉節點(Nil)是黑色的
-
如果某一個節點是紅色,那麼它的子節點必須是黑色(不能出現兩個紅色節點相連 的情況)
-
對每一個節點,從該節點到其所有後代葉節點的簡單路徑上,均包含相同數目的黑色節點
-
-
紅黑樹新增節點的預設顏色
-
新增節點時,預設為紅色,效率高
-
-
紅黑樹新增節點後如何保持紅黑規則
-
根節點位置
-
直接變為黑色
-
-
非根節點位置
-
父節點為黑色
-
不需要任何操作,預設紅色即可
-
-
父節點為紅色
-
叔叔節點為紅色
-
將"父節點"設為黑色,將"叔叔節點"設為黑色
-
將"祖父節點"設為紅色
-
如果"祖父節點"為根節點,則將根節點再次變成黑色
-
-
叔叔節點為黑色
-
將"父節點"設為黑色
-
將"祖父節點"設為紅色
-
以"祖父節點"為支點進行旋轉
-
-
-
-
1.2成績排序案例【應用】
-
案例需求
-
用TreeSet集合儲存多個學生資訊(姓名,語文成績,數學成績,英語成績),並遍歷該集合
-
要求: 按照總分從高到低出現
-
-
程式碼實現
學生類
public class Student implements Comparable<Student> { private String name; private int chinese; private int math; private int english; public Student() { } public Student(String name, int chinese, int math, int english) {
測試類
public class TreeSetDemo { public static void main(String[] args) { //建立TreeSet集合物件,通過比較器排序進行排序 TreeSet<Student> ts = new TreeSet<Student>(); //建立學生物件 Student s1 = new Student("jack", 98, 100, 95); Student s2 = new Student("rose", 95, 95, 95); Student s3 = new Student("sam", 100, 93, 98); //把學生物件新增到集合 ts.add(s1); ts.add(s2); ts.add(s3); //遍歷集合 for (Student s : ts) { System.out.println(s.getName() + "," + s.getChinese() + "," + s.getMath() + "," + s.getEnglish() + "," + s.getSum()); } } }
資源來源 : 黑馬程式設計師