Java 中部分類概念的區(qū)分

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框架。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 本系列出于AWeiLoveAndroid的分享,在此感謝,再結(jié)合自身經(jīng)驗查漏補缺,完善答案。以成系統(tǒng)。 Java基...
    濟公大將閱讀 1,627評論 1 6
  • (一)Java部分 1、列舉出JAVA中6個比較常用的包【天威誠信面試題】 【參考答案】 java.lang;ja...
    獨云閱讀 7,279評論 0 62
  • 1 、一個".java" 源文件中是否可以包括多個類(不是內(nèi)部類)?有什么限制?可以有多個類,但只能有一個 pub...
    盡人事聽天命_6c6b閱讀 184評論 0 0
  • 1.Java中的原始數(shù)據(jù)類型都有哪些,它們的大小及對應的封裝類是什么? 關于boolean的說明: boolean...
    大棄閱讀 1,143評論 0 12
  • 1.java容器都有哪些?(容器指的是集合類) 基本概念 Java容器類類庫的用途是“持有對象”,并將其劃分為兩個...
    久伴_不離閱讀 1,448評論 0 5

友情鏈接更多精彩內(nèi)容