String和Vector源碼的總結

關于String的源碼的總結:

  1. String對象是不可變類型,返回類型為String的String方法每次返回的都是新的String對象,除了某些方法的某些特定條件返回自身。

  2. String對象的三種比較方式:

  • ==內存比較:直接對比兩個引用所指向的內存值,精確簡潔直接明了。

  • equals字符串值比較:比較兩個引用所指對象字面值是否相等。

  • hashCode字符串數值化比較:將字符串數值化。兩個引用的hashCode相同,不保證內存一定相同,不保證字面值一定相同。

關于Vector的源碼,給出幾點比較重要的總結:

1、Vector是內部是以動態(tài)數組的形式來存儲數據的。Vector有四個不同的構造方法。無參構造方法的容量為默認值10,僅包含容量的構造方法則將容量增長量(從源碼中可以看出容量增長量的作用,第二點也會對容量增長量詳細說)明置為0。

2、Vector具有數組所具有的特性、通過索引支持隨機訪問、所以通過隨機訪問Vector中的元素效率非常高、但是執(zhí)行插入、刪除時效率比較地下、具體原因后面有分析。注意擴充容量的方法ensureCapacityHelper。與ArrayList相同,Vector在每次增加元素(可能是1個,也可能是一組)時,都要調用該方法來確保足夠的容量。當容量不足以容納當前的元素個數時,就先看構造方法中傳入的容量增長量參數CapacityIncrement是否為0,如果不為0,就設置新的容量為就容量加上容量增長量,如果為0,就設置新的容量為舊的容量的2倍,如果設置后的新容量還不夠,則直接新容量設置為傳入的參數(也就是所需的容量),而后同樣用Arrays.copyof()方法將元素拷貝到新的數組。

3、Vector實現了AbstractList抽象類、List接口、所以其更具有了AbstractList和List的功能、前面我們知道AbstractList內部已經實現了獲取Iterator和ListIterator的方法、所以Vector只需關心對數組操作的方法的實現、

4、Vector實現了RandomAccess接口、此接口只有聲明、沒有方法體、表示Vector支持隨機訪問。

5、Vector實現了Cloneable接口、此接口只有聲明、沒有方法體、表示Vector支持克隆。

6、Vector實現了Serializable接口、此接口只有聲明、沒有方法體、表示Vector支持序列化、即可以將Vector以流的形式通過ObjectOutputStream來寫入到流中。

7、Vector是線程安全的。很多方法都加入了synchronized同步語句,來保證線程安全。同樣在查找給定元素索引值等的方法中,源碼都將該元素的值分為null和不為null兩種情況處理,Vector中也允許元素為null。

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

相關閱讀更多精彩內容

  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,623評論 18 399
  • Collection接口 Collection接口是所有集合的祖先類。他有兩個構造方法,一個無參構造,一個是帶Co...
    夜幕繁華閱讀 682評論 0 0
  • 一、基本數據類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數值 對于byte類型而言...
    龍貓小爺閱讀 4,435評論 0 16
  • java筆記第一天 == 和 equals ==比較的比較的是兩個變量的值是否相等,對于引用型變量表示的是兩個變量...
    jmychou閱讀 1,644評論 0 3
  • 一 晚上9點多,我正在為兒子的洗澡做準備,微信提示音顯示有消息進來...
    怪物來了閱讀 963評論 0 0

友情鏈接更多精彩內容