第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java中HashMap關(guān)鍵字transient的疑惑

Java中HashMap關(guān)鍵字transient的疑惑

桃花長相依 2019-03-30 09:34:03
HashMap中有個對象transientEntry[]table;這個是存儲數(shù)據(jù)的地方,但是為什么要加上關(guān)鍵字transient呢對于transient的解釋transient是Java語言的關(guān)鍵字,用來表示一個域不是該對象串行化的一部分。當(dāng)一個對象被串行化的時候,transient型變量的值不包括在串行化的表示中,也就是說沒法持久化。那么這種設(shè)計為什么用在HashMap中呢?有什么用意
查看完整描述

2 回答

?
守著一只汪

TA貢獻1872條經(jīng)驗 獲得超4個贊

好問題.原因當(dāng)然如@Windoze所言,有效率的考慮,但還有更深的原因.
EffectiveJava2nd,Item75,Joshua大神提到:
Forexample,considerthecaseofahashtable.Thephysical
representationisasequenceofhashbucketscontainingkey-value
entries.Thebucketthatanentryresidesinisafunctionofthehash
codeofitskey,whichisnot,ingeneral,guaranteedtobethesame
fromJVMimplementationtoJVMimplementation.Infact,itisn'teven
guaranteedtobethesamefromruntorun.Therefore,acceptingthedefaultserializedformforahashtablewouldconstituteaseriousbug.Serializinganddeserializingthehashtablecouldyieldan
objectwhoseinvariantswereseriouslycorrupt.
怎么理解?看一下HashMap.get()/put()知道,讀寫Map是根據(jù)Object.hashcode()來確定從哪個bucket讀/寫.而Object.hashcode()是native方法,不同的JVM里可能是不一樣的.
打個比方說,向HashMap存一個entry,key為字符串"STRING",在第一個java程序里,"STRING"的hashcode()為1,存入第1號bucket;在第二個java程序里,"STRING"的hashcode()有可能就是2,存入第2號bucket.如果用默認的串行化(Entry[]table不用transient),那么這個HashMap從第一個java程序里通過串行化導(dǎo)入第二個java程序后,其內(nèi)存分布是一樣的.這就不對了.HashMap現(xiàn)在的readObject和writeObject是把內(nèi)容輸出/輸入,把HashMap重新生成出來.
                            
查看完整回答
反對 回復(fù) 2019-03-30
?
守著星空守著你

TA貢獻1799條經(jīng)驗 獲得超8個贊

首先你要明白,一個HashMap從功能上來說就是一個Map。所謂Map,就是存放Key/Value的數(shù)據(jù)結(jié)構(gòu),所以,任何一個Map類的數(shù)據(jù)結(jié)構(gòu),從邏輯上說只包含key和value,其它所有的東西都只是輔助而已。
所以HashMap自己實現(xiàn)了readObject和writeObject,在其中它保存了bucketsize,entrycount(這兩個其實不是必需的,但有助于提高效率)和所有的key/value(這個才是必須的)。
PS.如果我沒記錯,其實它還調(diào)用了defaultReadObject/defaultWriteObject讀寫了loadfactor、threshold之類的其它一些東東。
                            
查看完整回答
反對 回復(fù) 2019-03-30
  • 2 回答
  • 0 關(guān)注
  • 501 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號