1.重載和重寫的區(qū)分
重寫(Override):重寫是子類對父類的允許訪問的方法的實現(xiàn)過程進行重新編寫, 返回值和形參都不能改變。即外殼不變,核心重寫!
重寫的好處在于子類可以根據(jù)需要,定義特定于自己的行為。 也就是說子類能夠根據(jù)需要實現(xiàn)父類的方法。
重載(reload):一個類中多態(tài)性的一種表現(xiàn),同名方法的參數(shù)列表不同
2.equals與==的區(qū)分
==:比較的是變量在內(nèi)存中存放的內(nèi)存地址是否相同,即是否是同一個對象
equals:用來比較的是兩個對象的內(nèi)容是否相等
3.String、StringBuffer和StringBuilder的區(qū)分
String是只讀字符串,并不是基本的數(shù)據(jù)類型,而是一個對象。從底層代碼來看是一個final類型的字符數(shù)組。一經(jīng)創(chuàng)建,則不能修改。每次對String的操作都會生成新的String對象
StringBuffer和StringBuilder的底層都是可變字符數(shù)組
StringBuffer對方法加了同步鎖或者對調(diào)用的方法加了同步鎖,所以線程是安全的。
StringBuilder并沒有對方法進行加同步鎖,所以是非線程安全的。
4.ArrayList和LinkedList的區(qū)別
ArrayList和LinkedList是List的兩個重要實現(xiàn)類。
ArrayList可以看作是能夠自動增長的數(shù)字。在set和get操作時比LinkedList性能更好
LinkList是一個雙鏈表,在添加和刪除元素時具有比ArrayList更好的性能
5.HashMap和HashTable的區(qū)別
5.1 兩個的父類不同
HashMap和HashTable都實現(xiàn)map、Cloneable(可復制)、Serializable(可序列化)這三個接口
HashMap是繼承自AbstMap類
HashTable是繼承自Dictionary類
5.2 對外提供的端口不同
HashTable比HashMap多提供了elements()和contains()兩個方法
elements()返回HashTable中的value的枚舉
contains()判斷HashTable是否包含傳入的value。它的作用與containsValue()一致。事實上,containsValue()只是條用了一下contains()方法
5.3 對null值的支持不同
HashTable:Key和Value都不能為null
HashMap:key可以為空,但是只能由一個,因為必須保證Key的唯一性,可以有多個key的value為null
5.4 安全性不同
HashMap是線程不安全的,多線程并發(fā)可能會產(chǎn)生死鎖等問題,需要單獨處理多線程的安全問題
HashTable是線程安全的,每個方法上都有synchronized關鍵字,因此可直接用于多線程中。
HashMap的效率遠高于HashTable。這樣設計是合理性是因為大部分的使用場景都是單線程。當需要多線程操作時可以用ConcurrentHashMap。
ConcurrentHashMap雖然也是線程安全的,但是它的效率比HashTable要高好多倍,因為它使用了分段鎖,并不對整個數(shù)據(jù)進行鎖定。
5.5 初始化容量大小和每次擴容大小不同
HashMap的初始容量為16,Hashtable初始容量為11,兩者的填充因子默認都是0.75。
HashMap擴容時是當前容量翻倍即:capacity*2,
Hashtable擴容時是容量翻倍+1即:capacity*2+1。
5.6 計算hash的方法不同
Hashtable計算hash是直接使用key的hashcode對table數(shù)組的長度直接進行取模
HashMap計算hash對key的hashcode進行了二次hash,以獲得更好的散列值,然后對table數(shù)組長度取摸。
6.Collection包結(jié)構,與Collections的區(qū)別
Collection是集合類的上級接口,子接口有Set、List、LinkedList、ArrayList、Vector、Stack、Set
Collections是集合類的一個幫助類。它包含有各種有關集合操作的靜態(tài)多態(tài)方法,用于實現(xiàn)對各種集合的搜索、排序、線程安全話等操作。此類不能實例化,就像一個工具類,服務于java的Collection框架。