Java 中必备的公共知识点

在java中,有很多的公共知识点,这些知识点难度不大,但是却常常容易忽略,在此,特意整理这些知识点,一方面是为了提醒自己本身,另一方面是为整理给有需要的童鞋们,

1.1 String,StringBuilder,StringBuffer 的区别

性质: String是字符串常量,StringBuilder,StringBuffer是字符串变量,
执行速度: String < StringBuffer < StringBuilder (比较场景为单线程)
应用场景: StringBuffer是同步的,也就是线程安全的,StringBuilder是线程不安全的。
在单线程操作中,StringBuilder的执行性能会比StringBuffer好一些,
在多线程的操作中,StringBuffer的执行性能会比StringBuilder好一些
在实际应用中应该根据:
小结:
① 少量数据用 String
② 单线程大量数据用 StringBuilder
③ 多线程大量数据用 StringBuffer

1.2 HashTable 与 HashMap的区别

相同点: HashTable 与 HashMap 都实现了Map接口
执行速度: HashTable < HashMap (比较场景为单线程)
应用场景: HashTable是 synchronized (同步)的,HashMap是非 synchronized (同步)的。
因此 HashTable 是线程安全的,HashMap是线程不安全的
小结:
① 单线程下使用 HashMap
② 多线程下使用 HashTable

1.3 ArrayList、LinkedList、Vector的区别

本质: ArrayList,Vector 内部实现是数组,LinkedList内部实现是链表
执行速度: Vector < ArrayList (比较场景为单线程)
相同点: ArrayList,LinkedList,Vector都是对集合的操作。
不同点:
① 其实 ArrayList,Vector 与 LinkedList的区别就是 数组与链表的区别,ArrayList,Vecotr的 get() 和 set() 性能大于 LinkedList,但是 add() 和 remove()方法的性能却不及LinkedList。
② ArrayList与 Vector的区别是: Vector是同步的,也就是线程安全的,ArrayList 是非同步的,也就是线程不安全的。
小结:
① 在单线程get()与set()频繁时,用 ArrayList。
② 在多线程get()与set()频繁时,用 Vector。
③ 在add()与remove()操作频繁时,用 LinkedList。

1.4 Override和Overload的含义去区别

本质: Override和Overload 都是多态性的不同体现形式。
不同点:
① Override(重写) 体现的是子父类的多态性。Overload(重载) 体现的是当前类中的多态性。
含义:
Override(重写): 指的是子类定义的方法与父类中的某个方法完全一样 (方法名,方法参数,参数个数,返回值均一致),
Override(重写)站的角度为: 父类
Overload(重载): 指的是在同一个类中,方法名相同,但返回值,参数个数,参数类型不能相同。
Overload(重载): 站的角度为: 自己本身