代码为java StringBuilder类的reverse方法,记录一下
public AbstractStringBuilder reverse() {
boolean hasSurrogates = false;
int n = count - 1;
for (int j = (n-1) >> 1; j >= 0; j--) {
int k = n - j;
char cj = value[j];
char ck = value[k];
value[j] = ck;
value[k] = cj;
if (Character.isSurrogate(cj) ||
Character.isSurrogate(ck)) {
hasSurrogates = true;
}
}
if (hasSurrogates) {
reverseAllValidSurrogatePairs();
}
return this;
}
原理也很简单,从数组中间开始向两端交换对称的两个位置
理解下(n-1)>>1,如果是偶数个元素则刚好是中间两个,如果是奇数个则中间那个元素不变