数据结构
最小生成树:因为是树,所以他不能有回路,正好要用掉(V-1)条边(V为顶点数),并且要权值最小。有两种算法:Prim算法和Kruskal算法。这两种算法都是利用到了贪心的思想来做到权值最小。
Prim算法是从某一个顶点开始把它当成一棵树,找与他相接的最小权值的边,然后连接起来又成为一棵新的树(但是要保证没有回路),依此就能生成最小权值的树了。
Kruskal是从边入手,先找最小的边把边两旁的结点生成一棵树,并且不能形成回路,该过程则为将森林合并成树。找最小的边可以通过最小堆来实现,不构成回路可以通过并查集来实现。
关键路径:是图中不可延误的路径(从起点到终点有多条路线,权值最小为关键路径),关键路径往往不只一条。
java
在编译时类型和运行时类型不同时,就可能出现多态。(原因好像是因为子类会覆盖父类,子类又属于特殊的父类,所以java允许把一个子类对象直接赋给父类对象,称为向上转型)
instanceof运算符前一个操作数通常是一个引用型变量,后面通常是一个类,他可以判断前面的对象是否是后面的类 ;他的作用是在强制转换前判断是否前面的对象是后面的类,是否可以成功转化,增强了代码的健壮性。
为了确保父类的封装性,通常要尽量隐藏父类的内部数据不要让子类能随意访问、修改父类的方法;尽量不要再父类构造器中调用将要被子类重写的方法。
我认为组合类可以看成父类,组合类可以把自身的方法给其他类复用。
初始化块的修饰符只能是static,它是构造器的补充,但是它是一段固定的代码,不接收参数,所以初始化块会把一个类中的对象初始化成完全相同的。
静态初始化块也称为类初始化块,因为它通常对类进行初始化。
八种基础类型都有对应的包装类,他们的包装类具有对象的特性,可以更广泛的应用在java中,jdk提供了自动装箱和自动拆箱的功能。