JavaSE:
①包装类:对比基础数据类型有更高级的功能。另外在容器中(或者叫集合)包装类有重要的作用。容器中只能存放包装类,不能存放基础数据类型。
包装类一些特性:被final修饰,不能有子类了。。。jdk1.0就有,是开服玩家。。。其实在代码底层中包装类封装了一个int。。。
自动装箱自动拆箱:是int和Integer之间的相互转化。
②Math类:Math类无需导包。。。也不能被继承。。。直接通过类名调用方法,无需使用对象。。。
③String类:无需导包。。。也不能被继承。。。直接通过类名调用方法,无需使用对象。。。
要重点说的是toString和Valueof的区别,都是转换字符串,而toString是Object类中自带的,子类也可以重写。但Valueof是String中的方法,使用的话是用类名直接引用。
④String、StringBuffer、StringBuilder的区别:总的来说String是内容不可变的字符串,也就是改变字符串内容必须改变地址,在底层源码中他的长度被写死了。而后两者可以通过方法改变长度。StringBuilder是jdk1.5之后的,效率高。线程不安全。StringBuffer是jdk1.0的开服玩家,效率低点但是线程安全,不过最多使用的还是StringBuilder。
⑤集合:为什么要有集合?那就是集合比数组强在哪里,数组是固定大小的,而集合可以改变大小(这在集合的底层实现中也有体现)。
集合分为两类,一种是Collection,分为List和Set,一种是Map,一种是储存一个数值,一种是储存一对。
⑥Collection接口:有一些常用方法,可以细分为增删改查几种吧。比较重要的是Collection的遍历用的是增强for循环。
⑥List接口:有一些常用方法,也可以细分为增删改查几种。
⑥ArrayList:重要的是他的底层源码,我们能发现其实他在底层实现中是一个数组,和一个代表数组大小的int值。
常常和Vector进行比较,底层实现是一样的,但Vector是线程安全的,可惜效率太低。同时在扩容是是变成2倍。
而ArrayList在1.7时初始大小是10,1.8之后初始大小是0,第一次add时才变成10,同时扩容会变成1.5倍数。
⑦泛型:为什么要有泛型呢,是给类贴上了标签,这个标签是各种引用数据类型。在jdk1.5之后有的东西。其实就是麻烦一次,方便了之后的操作。
⑧自定义泛型结构:没太明白是干嘛用的,感觉也是规范化一些东西,规范代码,这样错误就会在运行之前(也就是编程的时候就出现)。
当继承泛型类的时候自己跟父类指定用的集合一样,反之父类不指定自己也是泛型类。
泛型方法,不是带泛型就是泛型方法,参数中的泛型不是类中的泛型才可以!!!泛型方法可以是静态方法。但是静态方法中不能使用类中的泛型。为什么?因为静态方法最先加载!!!
通配符:就是一个问号,啥都适用。泛型受限也是基于他的一个东西,super就是定了他的下限,extend就是定了他的上限。
算法:
赎金信+三数之和+四数之和。
①赎金信:代码随想录上推荐用的数组,我还是用了HashMap,感觉直观上HashMap更适合这道题,不过确实数组的速度更快。
总的来说先遍历杂志数组,看看每个单词有多少个,再看看赎金信数组每个单词有多少个。前者在map中加,后者减,有负数就返回false。
②三数之和:用了三个指针,还挺好理解。步骤就是先排序,然后根据第一个数判断需不需要剪枝。然后a去重。然后根据和来调整后两个指针的位置,然后后两个指针也要去重。
③四数之和:多一个指针,多一重循环,本质是一样的。
②③两题的去重是关键,要明白为什么判断nums[i]和nums[i-1]是否相等。
明天把集合看完吧,少看点课了。。这周应该能结束JavaSE中阶,还有IO、网络编程、多线程。。
双指针的题还可以,明天给过了。ojbk,睡觉