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条访问记录是什么?