Java日常小结
Tip1:Java中Vector和ArrayList的区别,首先看这两类都实现List借口,而List接口一共有三个实现类,分别是ArrayList、Vector和LinkList。List用于存放多个元素,能够维护元素的次序,并且允许元素的重复。3个具体实现类的相关却别如下:
1、ArrayList是最常用的List实现类,内部是通过数组实现的,它允许对元素惊醒快速随机访问。数组的缺点是每个元素之间不能有间隔,当数组大小不满足时需要增加存储能力,就要将已经有数组的数据复制到新的存储空间中。当从ArrayList的中间位置插入或者删除元素时需要对数组进行复制、移动、代价比较高。因此,它适合随机查找和遍历,不适合插入或者删除。
2、Vector与ArrayList一样,也是通过数组实现的,不同的是它支持线程的同步,即某一时刻只有一个线程能够写Vecor,避免多线程同事些而引起的不一致性,但实现同步需要很高的花费,因此,访问它比访问ArrayList慢。
3、LinkList使用链表结构存储数据的,很适合数据的动态插入和删除,随机访问和遍历速度比较慢。另外,她还提供了List
List接口中没有定义的方法,专门用于操作表头和表尾元素,可以当做堆栈、队列和双向队列使用。
关于ArrayList和Vector区别如下:
1、ArrayList在内存不足的情况下默认是拓展50%+1个,Vector是默认拓展1倍。
2、Vector提供index(obj,start)接口,ArrayList没有。
3、Vector属于线程安全级别的,但是大多数情况下不适用Vector,因此线程安全需要跟大的系统开销。
Tip2:Java中的instanceOf运算符是用来在运行时指出对象是否是特定类的一个实例。instanceOf通过返回一个布尔值来指出这个对象是否是这个特定类或者是它的子类的一个实例。
Tip3:通配符:?
无限定通配符,<?>
上限通配符,<? extends Number>
。表示参数类型只能是Number的子类
下线通配符,<? supper Number>
。表示参数类型只能是Number的父类。
使用泛型、通配符提高了代码的复用性。
Tip4: Java泛型是在编译期有效,在运行期被删除,也就是说所有泛型参数类型在编译后都被清除掉。
1、方法重载:发生在编译时。方法的重载也被称为编译时多态,因为编译器可以根据参数的类型来选择使用哪个方法
2、方法覆盖:这个是在运行时发生的。方法的覆盖被称为运行时多态,因为编译期间编译器不知道并
没法知道该去调用哪个方法(因为是方法的重写,两个方法都是一模一样的,编译器无法分辨出该调用哪个方法)
3、泛型(又称为类型检验):这个是发生在编译期间。编译期负责检查程序中类型的正确性,然后把使用了泛型的代码翻译或重写成可以执行在当前JVM上的非泛型代码。这个技术被称为“类型擦除”。换句话说,编译器会查出所有括号里的类型信息,来保证更早版本的JRE的兼容性。