不詩意的女程序媛不是好廚師~
轉載請註明出處,From李詩雨—https://blog.csdn.net/cjm2484836553/article/details/105152708
面試官:“你一定看過Activity
的onCreate()
方法吧,爲什麼它要用bundle來傳遞數據,而不用HashMap
來代替呢?”
這個問題就要我們來看看源碼了,我們點進去Bundle
來一探究竟:
我們來一下存儲數據的方法putByte()
, 發現它調用的是super.putByte()
,我們繼續跟進:
我們發現它調用的是mMap
的put()
方法。而且,我們環顧四周,他們都是調用的mMap
的put()
方法。
那不經讓我們想到 關鍵點 就在這個mMap
了,它到底是個什麼東西!好激動呀,繼續看:
呦西!到這裏我們明白了!原來mMap就是ArrayMap啊。那面試官其實不就是想問“爲什麼用ArrayMap來傳遞數據而不用HashMap呢?”
那接下來我們的任務不就要比較ArrayMap與HashMap了嗎?→即ArrayMap的優勢在哪?
嘻嘻,答案如下:
- 1.ArrayMap適合於小數據量操作,如果在數據量比較大的情況下,它的性能將退化。HashMap內部則是數組+鏈表結構,所以在數據量較少的時候,HashMap的Entry Array比ArrayMap佔用更多的內存。而在Activity中我們使用Bundle的場景大多數爲小數據量。所以使用ArrayMap實現更合適。
- 2.Android中如果使用Intent來攜帶數據的話,需要數據是基本類型或者是可序列化類型,Bundle使用Parcelable進行序列化,而HashMap則是使用Serializable進行序列化。在Android中Parcelable比Serializable性能要高。
關於第二點,我們在源碼中可以看到:
積累點滴,做好自己