在java中保存固定的字符串緩衝區長度的最佳做法是什麼?也就是說,如果固定值爲10,並且stringbuffer包含ABCDEFGHIJ,那麼當我們追加K時,會導致A被清除,結果值將爲BCDEFGHIJK。我在考慮使用StringBuffer的reverse()和setLenght()方法組合,但不知道它的性能如何達到100 K的長度。java中的固定長度的StringBuffer
4
A
回答
2
你可以使用delete:
void append(String s) {
buffer.append(s);
if(buffer.length() > MAX_LENGTH){
buffer.delete(0, buffer.length() - MAX_LENGTH);
}
}
更新:如果參數是一個長字符串這導致不必要的StringBuffer分配。爲了避免這種情況,您可以先縮短緩衝區,然後只根據需要添加儘可能多的字符串字符:
void append(String s) {
if (buffer.length() + s.length() > MAX_LENGTH) {
buffer.delete(0, buffer.length() + s.length() - MAX_LENGTH);
}
buffer.append(s, Math.max(0, s.length() - MAX_LENGTH), s.length());
}
9
這聽起來像是你在循環緩衝區之後。您可以創建char[]
並保持大小以及邏輯開始。然後當你需要將它轉換成一個字符串時,你可以創建兩個字符串(一個從緩衝區的末尾開始,另一個從開始)並將它們連接在一起。這將是相對昂貴的 - 儘量保持它儘可能多的時間作爲循環緩衝區。
請確保在每次操作時,您還考慮緩衝區而非的可能性已滿。採樣操作:
public void append(char c)
{
buffer[(size + start) % maxLength] = c;
if (size == maxLength)
{
start = (start + 1) % maxLength;
}
else
{
size++;
}
}
相關問題
- 1. 固定長度
- 2. 固定長度的NSString
- 3. 固定長度文件中的多個長度=「無界」
- 4. vis.js固定長度邊緣
- 5. 固定長度哈希
- 6. 如何使固定長度
- 7. XSL填充固定長度
- 8. 固定長度菜單
- 9. 固定長度BitArrays陣列
- 10. 字符串的固定長度排列
- 11. 固定長度的數量以及
- 12. 具有固定長度的C#
- 13. 連續,固定長度的可變長度序列批次
- 14. 爲固定長度的Java數組添加值
- 15. 使用Java創建固定長度的平面文件
- 16. 將Java BigInteger縮小爲固定長度的較小數字
- 17. 如何在Java中生成給定RSA私鑰的固定長度指數?
- 18. Java StringBuffer
- 19. MATLAB:從隨機長度向量中輸出一個固定長度的向量?
- 20. 接受的參數的非固定長度組中的功能
- 21. 將對象固定長度改爲預定義長度的大小
- 22. 固定長度的輸入形式的跨度大小
- 23. 在固定寬度的jquery中選擇太長的選項
- 24. 在ASP.NET 2.0中數組是否真的是固定的長度?
- 25. Java - 正則表達式固定長度拆分成數組
- 26. 使用python設置固定長度
- 27. iOS修剪視頻至固定長度
- 28. 固定長度整數數據類型
- 29. Python固定長度數據包
- 30. IE6中的固定高度