在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. 固定長度的MenuItems
- 4. 將java中的字符串拆分爲固定長度的塊
- 5. C#中固定長度的字符串
- 6. 與C++中的固定長度
- 7. 固定長度文件中的多個長度=「無界」
- 8. XSL填充固定長度
- 9. 固定長度哈希
- 10. 如何使固定長度
- 11. vis.js固定長度邊緣
- 12. 固定長度BitArrays陣列
- 13. 填充到固定長度
- 14. 固定長度菜單
- 15. 的Python的strftime%A固定長度
- 16. 使用不同固定長度的TextFieldParser
- 17. 選擇固定長度的查詢
- 18. 固定長度的HTML框架
- 19. MySQL/MariaDB固定長度的唯一BLOB
- 20. 拆分固定長度的字符串
- 21. 固定長度的大整數
- 22. 來自Sqoop的固定長度文件
- 23. 生成固定長度的列表
- 24. 固定長度的數量以及
- 25. 插入固定長度的輸入
- 26. MSChart固定長度的X軸
- 27. 字符串的固定長度排列
- 28. 具有固定長度的C#
- 29. 獲取固定長度的令牌
- 30. 固定長度字符串的數字