關于String的源碼的總結:
String對象是不可變類型,返回類型為String的String方法每次返回的都是新的String對象,除了某些方法的某些特定條件返回自身。
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。