我有一些關於數組的問題,我正在讀一些關於Java的書,現在我正在閱讀關於類StringBuilder的知識,我被教導說這個類將當前容量保存在數組中,容量不足,這個班級自動增加容量capacity = 2*(capacity + 1)
,當我學習c和C++時,如果我的陣列中沒有足夠的空間,我被教導要做同樣的事情,但爲什麼我不能找出多少內存,我需要,然後做capacity = capacity + homMuchDoINeed()
,或者爲什麼不capacity = 4 * capacity
,在此先感謝您的答案附加一個已存在的數組
0
A
回答
2
,爲什麼我就不能找出多少內存,我需要,然後做
capacity = capacity + homMuchDoINeed()
因爲那麼你需要與每個插入分配新的內存,所以一次插入需要線性時間,而n次插入需要二次時間。另一方面,如果你增長一個像x2或x1.5這樣的常數因子,單次插入需要分攤恆定時間,並且n次插入需要線性時間。
Stephan T. Lavavej在多個視頻中對此進行了說明,例如this one。
0
只是使用ArrayList
0
capacity = C * (capacity + K)
通常優於capacity = capacity + K
,因爲您不必經常重新分配,並且capacity = C * capacity
根本不可行(如果當前容量爲0,該怎麼辦?)。
但是,如果可能,我建議您使用standard containers。
1
自動增加只是一個經驗法則,以最大限度地減少對象的構造。
如果您知道將追加多少個元素,並且未來不會再添加元素,則最好明確指定大小以節省內存。在Java中,你可以做到這一點有:
Arrays.copyOf(oldArray,新尺寸)
如果你不知道,沒有更多的元素將被添加到陣列中,在Java中你可以只使用ArrayList,因爲它使用這個經驗法則透明地處理調整大小:
int newCapacity =(oldCapacity * 3)/ 2 + 1;
0
如果您知道需要多少容量,則可以在啓動時提供集合的容量。倍增代碼假定你不知道你最終需要多少內存(或者至少不需要擔心)
相關問題
- 1. 添加一個附加到一個已經存在
- 2. Php將值附加到已存在的數組
- 3. 如何將一些jQuery附加到已存在的函數?
- 4. 無法附加已存在的實體
- 5. 附加.mouseover和.mouseout到一個數組
- 6. JSON數組附加一個對象
- 7. 不能附加已經存在
- 8. 不能附加已經存在
- 9. 如何將數組附加到PHP中的另一個數組?
- 10. 數據附加到一個Python數組給了一個錯誤
- 11. 將一個整數「附加」到一個字符串數組,Java
- 12. 將數據附加到已存在的AudioBuffer對象
- 13. 將一個值附加到一個動態數組的末尾
- 14. 上一個數組附加到當前數組
- 15. 重複ASSOC數組值組合成一個附加的鍵
- 16. 在Python中將兩個數組附加在一起
- 17. 附加到數組的單個元素
- 18. jQuery存儲數組中的多個div並將該數組附加到div
- 19. 在CoffeeScript中如何將一個值附加到數組中?
- 20. 將jscrollbar附加到另一個組件
- 21. 附加一個numpy.array存儲在列表中的某個numpy.array
- 22. ios swift - 將數組附加到數組時未釋放內存
- 23. 檢查數組是否已經存在於一個VBA數組中
- 24. 將一個新的JButton添加到一個已經存在的JButton二維數組
- 25. 附加數據塊到另一個數組迅速
- 26. 如何將一個數組的所有元素附加到div
- 27. 如何將一個新的散列附加到散列數組?
- 28. 附加從bash的數組新條目到一個txt文件
- 29. 我可以追加一個已經存在的div到另一個已經存在的div嗎?
- 30. 將附加數據附加到PHP中的數組中