在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. 固定长度字符串的数字