7.ArrayList、LinkedList、Vector的区别。
ArrayList 和vector是采用数组的方式存储数据的,此数组元素大于实际存储的数据以便增加插入元素,都允许直接序号索引元素,但是插入数据要涉及到数组元素移动等内存操作,所以插入数据慢,查找有下标,所以查询数据块。Vector由于使用synchronized方法-线程安全,所以性能上比ArrayList要差,LinkedList使用双向链表实现存储,如果按照序号索引需要进行向前向后遍历,但是插入数据时只需要记录本项前后项即可,插入数据较快。
8. String、StringBuffer与StringBuilder的区别。
java中String类中使用字符数组保存字符串,因为有“final”修饰符,所以可以知道String对象是不可变的。
private final char value[];
StringBuilder与StringBuffer都继承自AbstractStringBuilder类,在AbstractStringBuilder中也是使用字符数组保存字符串。两种对象都是可变的。
char[] value;
String中的对象是不可变的,也就可以理解为常量,显然是线程安全的。
AbstractStringBuilder是StringBuffer与StringBuffer的公共父类,定义了一些字符串的基本操作(expandCapacity、append、insert、indexof)。
StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的。
StringBuilder是非线程安全的。
9. Map、Set、List、Queue、Stack的特点与用法。
Map
键到值的映射对象,键不能重复,一个键对应一个值。
TreeMap能保证顺序,HashMap不能保证其顺序。
Set
包含对象不能重复的Collection,Set只能通过游标来取值。
List
也是Collection的一个子接口,值可以重复,通过下标取值。
Stack
继承自vector,实现一个后进先出的栈。
Queue
先进先出
10. HashMap和HashTable的区别。
HashMap是HashTable的轻量级实现,都实现了Map接口。主要差异在于:
hashTable的键和值都不允许为空,而hashMap的值和键都允许为空。
hashTable是线程安全的。
18. Interface与abstract类的区别。
Java中Interface和abstract是支持抽象类定义的两种机制,
(1)两者都不能直接对其进行实例化
(2)一个类只能有一个继承,但是可以实现多个接口
(3)abstract类中可以有非抽象方法,Interface中所有方法都是public
20. java多态的实现原理。
同一操作作用于不同对象,可以有不同的解释,有不同的执行结果,这就是多态,简单来说就是:父类的引用指向子类对象。
多态的好处:
1.可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
2.可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。
3.接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。如图8.3 所示。图中超类Shape规定了两个实现多态的接口方法,computeArea()以及computeVolume()。子类,如Circle和Sphere为了实现多态,完善或者覆盖这两个接口方法。
4.灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。
5.简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。