精品网站建设需要多少钱seo网站诊断方案
Java 实现简单动态字符串
用 Java 实现简单动态字符串(Simple Dynamic String,SDS)结构体的示例代码:
import java.util.Arrays;public class SDS {// 字符串结束字符private static char endChar = '\0';// 字符串长度private int len;// buf数组中未使用的字节数private int free;// 字节数组private char[] buf;// 构造函数public SDS(String str) {this.len = str.length();this.buf = Arrays.copyOf(str.toCharArray(), this.len + 1);this.buf[this.len] = endChar;this.free = buf.length - len - 1;}// 获取buf数组public char[] getBuf() {return buf;}// 拼接字符串 sdscat 方法用于拼接字符串,实现了空间预分配策略。public void sdscat(String str) {char[] strTemp = str.toCharArray();int strTempLen = str.length();int lastLen = this.len + strTempLen;// 先判断长度if (lastLen < 1 * Math.pow(2, 20)) {// 小于1MB(2^20B),那么free空间=len大小,buf的实际长度为2*len+1this.free = lastLen;} else {// 大于1MB(2^20B),那么free空间=1MB,buf的实际长度为1MB+len+1this.free = (int) Math.pow(2, 20);}this.len = lastLen;// 拼接数组char[] originChar = this.toString().toCharArray();char[] result = Arrays.copyOf(originChar, lastLen);System.arraycopy(strTemp, 0, result, originChar.length, strTemp.length);this.buf = Arrays.copyOf(result, lastLen + 1);this.buf[lastLen] = endChar;}public int getLen() {return len;}public void setLen(int len) {this.len = len;}public int getFree() {return free;}public void setFree(int free) {this.free = free;}// toString 方法用于将 SDS 对象转换为字符串表示形式。@Overridepublic String toString() {StringBuilder stringBuilder = new StringBuilder("");for (int i = 0; i < this.buf.length; i++) {if (this.buf[i]!= endChar ) {stringBuilder.append(this.buf[i]);}}return stringBuilder.toString();}
}
测试:
public class TestSDS {public static void main(String[] args) {SDS sds = new SDS("a a");System.out.println(sds.getLen() +","+ sds.getFree());char[] a = sds.getBuf();for (char aTemp : a) {System.out.println(aTemp);}}
}