String底層原理
- 常量
形如下面這類字符串,將會被直接存儲進入常量區中。
String s = "123";
String s = new String("123");
- 在程序進行編譯的過程中,會將能夠確認的字符串同樣存入常量區中。
String s = "1" + "2";
如上,常量區中會存儲"1", “2”, “12”。
+
在拼接字符串時的作用
在使用+
拼接字符串時,會隱式的構造StringBuilder
對字符串進行構造,並將結果保存在Java堆中。
Integer和int的區別
Integer是對int的一個簡單包裝。
class Integer {
private final int val;
...
}
Final方法
- 在修飾類時,該類不能被繼承。
- 在修飾變量時,該變量只能夠被賦值一次。僅限該變量的值,而變量引用的值可以被修改。
- 修飾方法時,該方法不能夠被重寫。
紅黑樹與AVL樹
AVL樹是帶有平衡條件的二叉查找樹,一般是用平衡因子差值判斷是否平衡並通過旋轉來實現平衡,左右子樹樹高不超過1,和紅黑樹相比,AVL樹是嚴格的平衡二叉樹,平衡條件必須滿足(所有節點的左右子樹高度差不超過1)。AVL樹適合用於插入與刪除次數比較少,但查找多的情況。
一種二叉查找樹,但在每個節點增加一個存儲位表示節點的顏色,可以是紅或黑(非紅即黑)。通過對任何一條從根到葉子的路徑上各個節點着色的方式的限制,紅黑樹確保沒有一條路徑會比其它路徑長出兩倍,因此,紅黑樹是一種弱平衡二叉樹(由於是弱平衡,可以看到,在相同的節點情況下,AVL樹的高度低於紅黑樹),相對於要求嚴格的AVL樹來說,它的旋轉次數少,所以對於搜索,插入,刪除操作較多的情況下,我們就用紅黑樹。
思考題
有1TB的訪問記錄,求數據中出現次數最多的前20條訪問記錄是什麼?