關(guān)于String的源碼的總結(jié):
String對(duì)象是不可變類型,返回類型為String的String方法每次返回的都是新的String對(duì)象,除了某些方法的某些特定條件返回自身。
String對(duì)象的三種比較方式:
==內(nèi)存比較:直接對(duì)比兩個(gè)引用所指向的內(nèi)存值,精確簡(jiǎn)潔直接明了。
equals字符串值比較:比較兩個(gè)引用所指對(duì)象字面值是否相等。
hashCode字符串?dāng)?shù)值化比較:將字符串?dāng)?shù)值化。兩個(gè)引用的hashCode相同,不保證內(nèi)存一定相同,不保證字面值一定相同。
關(guān)于Vector的源碼,給出幾點(diǎn)比較重要的總結(jié):
1、Vector是內(nèi)部是以動(dòng)態(tài)數(shù)組的形式來(lái)存儲(chǔ)數(shù)據(jù)的。Vector有四個(gè)不同的構(gòu)造方法。無(wú)參構(gòu)造方法的容量為默認(rèn)值10,僅包含容量的構(gòu)造方法則將容量增長(zhǎng)量(從源碼中可以看出容量增長(zhǎng)量的作用,第二點(diǎn)也會(huì)對(duì)容量增長(zhǎng)量詳細(xì)說(shuō))明置為0。
2、Vector具有數(shù)組所具有的特性、通過(guò)索引支持隨機(jī)訪問(wèn)、所以通過(guò)隨機(jī)訪問(wèn)Vector中的元素效率非常高、但是執(zhí)行插入、刪除時(shí)效率比較地下、具體原因后面有分析。注意擴(kuò)充容量的方法ensureCapacityHelper。與ArrayList相同,Vector在每次增加元素(可能是1個(gè),也可能是一組)時(shí),都要調(diào)用該方法來(lái)確保足夠的容量。當(dāng)容量不足以容納當(dāng)前的元素個(gè)數(shù)時(shí),就先看構(gòu)造方法中傳入的容量增長(zhǎng)量參數(shù)CapacityIncrement是否為0,如果不為0,就設(shè)置新的容量為就容量加上容量增長(zhǎng)量,如果為0,就設(shè)置新的容量為舊的容量的2倍,如果設(shè)置后的新容量還不夠,則直接新容量設(shè)置為傳入的參數(shù)(也就是所需的容量),而后同樣用Arrays.copyof()方法將元素拷貝到新的數(shù)組。
3、Vector實(shí)現(xiàn)了AbstractList抽象類、List接口、所以其更具有了AbstractList和List的功能、前面我們知道AbstractList內(nèi)部已經(jīng)實(shí)現(xiàn)了獲取Iterator和ListIterator的方法、所以Vector只需關(guān)心對(duì)數(shù)組操作的方法的實(shí)現(xiàn)、
4、Vector實(shí)現(xiàn)了RandomAccess接口、此接口只有聲明、沒(méi)有方法體、表示Vector支持隨機(jī)訪問(wèn)。
5、Vector實(shí)現(xiàn)了Cloneable接口、此接口只有聲明、沒(méi)有方法體、表示Vector支持克隆。
6、Vector實(shí)現(xiàn)了Serializable接口、此接口只有聲明、沒(méi)有方法體、表示Vector支持序列化、即可以將Vector以流的形式通過(guò)ObjectOutputStream來(lái)寫(xiě)入到流中。
7、Vector是線程安全的。很多方法都加入了synchronized同步語(yǔ)句,來(lái)保證線程安全。同樣在查找給定元素索引值等的方法中,源碼都將該元素的值分為null和不為null兩種情況處理,Vector中也允許元素為null。