java中的固定长度StringBuffer

cac*_*ert 5 java stringbuffer

在java中修复stringbuffer长度的最佳做法是什么?也就是说,如果固定值为10且stringbuffer保持ABCDEFGHIJ,当我们追加K将导致A被清除并且结果值将是BCDEFGHIJK.我正在考虑使用StringBuffer的reverse()和setLenght()方法组合但不知道它的性能如何达到100 K长度.

Jon*_*eet 9

这听起来像是在循环缓冲区之后.您可以创建char[]并维护大小以及逻辑起点.然后,当您需要将其转换为字符串时,您可以创建两个字符串(一个来自缓冲区的末尾,另一个来自开头)并将它们连接在一起.这将是相对昂贵的 - 尝试尽可能保持它作为循环缓冲区尽可能多的时间.

确保每个操作上也考虑了缓冲的可能性不是充满虽然.样品操作:

public void append(char c)
{
    buffer[(size + start) % maxLength] = c;
    if (size == maxLength)
    {
        start = (start + 1) % maxLength;
    }
    else
    {
        size++;
    }
}
Run Code Online (Sandbox Code Playgroud)


kap*_*pex 2

您可以使用删除

void append(String s) {
    buffer.append(s);
    if(buffer.length() > MAX_LENGTH){
        buffer.delete(0, buffer.length() - MAX_LENGTH);
    }
}
Run Code Online (Sandbox Code Playgroud)

更新:如果参数是长字符串,则会导致不必要的 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());
}
Run Code Online (Sandbox Code Playgroud)