Java的陣列長度是不可改變的,StringBuilder的底層陣列又說長度可以改變,這不是矛盾嗎?

時間 2021-09-09 12:17:06

1樓:啦啦啦

錢包的大小肯定是不能變的,做的時候多大,永遠都多大。

有一天你錢多了,裝不下了。那就自然去買了個更大的錢包,然後把小錢包裡的錢裝到大錢包裡。

小錢包...拋棄掉

2樓:我是阿柒啊

明確乙個概念:為什麼陣列不可變,因為在計算機中要求陣列必須連續儲存,所以我們在建立陣列的時候要指定型別和長度,這樣才能告訴計算機要給我這個陣列分配多少記憶體。

如果我們申請了String[10]的陣列,當我有第11個字串需要儲存的時候怎麼辦,我們只能新建乙個String[11],然後將String[10]裡面的字串拷貝到String[11]中,然後再將第11個字串放在String[11]裡面。這就是陣列擴容。

StringBuilder就是利用了上面這個方法,當底層陣列長度不夠了,就建立乙個新的陣列,然後再將元素拷貝過去,可以看底層原始碼:

3樓:

初始化陣列需要指定長度,指定好長度才知道該申請多少記憶體。

如果發現陣列不夠存了怎麼辦呢,怎麼讓它變長?

申請乙個新的足夠長的陣列,把原來陣列的資料 copy 過來,然後陣列就 「變長」 了。

c 如何獲取指標指向的byte陣列長度?

Pluto Hades 簡單陣列的指標是沒有陣列總長資訊的,所以必須傳長度。通過陣列名獲取長度請參考bing的回答。都用上C 了,我建議就別搞這種C語法了。你可以封裝乙個byte類。不知道如何下手的話,可以參考一下qt的QByteArray類。 程式設計師檸檬 題目我看了幾遍,不知道我這樣理解對不對...

Java中如何隨機選取乙個長度為10的陣列中的5個不重複的數?

luoxn28 初始化N 陣列長度 10 每次 Random nextInt N 結果為m,然後將下標為m的資料和陣列最後乙個元素交換位置,然後N 繼續 Random nextInt N 直到找到5個資料即可,也就是陣列中最後5個元素。 Aetherus HashMap Boolean duplic...

乙個長度為n的整數陣列,是否有演算法可以在O n 的時間複雜度內,求出元素兩兩之差的最小值?

有。這是2D closest pair problem的乙個特殊情況,用隨機增量演算法可以做到期望O n 複雜度。注意這不違反高票答案提到的lower bound,因為用到了hashing。 先使用線性時間複雜度演算法進行排序,然後對有序陣列掃瞄一遍即可。ps 需要陣列中的數的絕對值的上界存在,在實...