數(shù)組擴容的兩種方式 變長數(shù)組是什么?
變長數(shù)組是什么?為什么HashMap的數(shù)組長度一定是2的次冪?]有兩個原因1。為了查找和添加元素,模塊操作用于查找數(shù)組的下標。如果模運算是2的n次方,則可以用位運算符代替,效率高。2. 擴容方便。如果
變長數(shù)組是什么?
為什么HashMap的數(shù)組長度一定是2的次冪?
]有兩個原因
1。為了查找和添加元素,模塊操作用于查找數(shù)組的下標。如果模運算是2的n次方,則可以用位運算符代替,效率高。
2. 擴容方便。
如果直接查看源代碼,可以看到擴展的resize方法的參數(shù)是2*表.長度(圖中是JDK7的源代碼),也就是說每次擴容都是容量的兩倍,擴容后需要進行數(shù)據(jù)遷移。如果初始長度為2的n次方,則擴展將減少數(shù)據(jù)遷移的次數(shù)。
例如,初始長度為16,將擴展到32。位置1中的節(jié)點僅在擴展后遷移到位置1和17。實際上,I位置的節(jié)點只會遷移到I之前和I擴展之后的數(shù)組長度。
例如,當數(shù)組的長度為16時,它位于1的位置。當它擴展到32時,它會被移到17的位置
例如,當數(shù)組的長度為16時,它就在1的位置。當它擴展到32時,它仍然處于1的位置。
這是主要原因。
順便說一下,在源代碼中,如果您不將其設(shè)置為2的n次方,它也將幫助您將其設(shè)置為2的n次方。例如,如果通過15,它將幫助您將其設(shè)置為16。源代碼的對應(yīng)方法是2的整數(shù)倍。
希望對您有所幫助。你可以關(guān)注我,分享一些關(guān)于源代碼思想的知識
Java中數(shù)組的長度是不能改變的。Java中數(shù)組的定義是一組相同類型、固定長度的數(shù)據(jù)。一旦初始化,長度就不能更改。如果要使用的數(shù)組長度不確定,有兩種解決方案:第一種是在初始化數(shù)組時申請足夠大的長度,這樣會造成內(nèi)存空間的浪費,一般不建議這樣做。第二種方法是以Java提供的set方式存儲數(shù)據(jù),如list、set和map對象。一方面,這些類型的對象的長度是動態(tài)增長的。另一方面,這些類提供了許多方法來輕松地操作數(shù)據(jù)。因此,當要存儲的數(shù)據(jù)量不確定時,第二種方法優(yōu)于第一種方法。
數(shù)組可以改變長度嗎?
一定要先聲明數(shù)組的長度,否則系統(tǒng)不會為其分配內(nèi)存空間。Java中的數(shù)組是固定長度的。例如,int[]a={}定義的數(shù)組a的長度是0,這是固定長度。以后不允許給它賦值,因為它的長度在定義后不能更改。使用表時,數(shù)組的長度不能超過限制。