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