问题描述
在String
上进行计算时,将它们转换为char
数组然后对其进行处理会更好吗?
那么所有String
问题实际上都是数组问题吗?
例如,就性能而言,哪种方法更好? 优点/缺点是什么?
public static String repeatEnd1(String str, int n) {
StringBuilder sb = new StringBuilder();
if (n <= str.length()) {
String lastChars = str.substring(str.length() - n);
for (int i = 0; i < n; i++) {
sb.append(lastChars);
}
}
return sb.toString();
}
public static String repeatEnd2(String str, int n) {
if (n > str.length()) {
return str;
}
char[] chars = str.toCharArray();
char[] lastN = Arrays.copyOfRange(chars, chars.length - n, chars.length);
char[] nLastN = new char[n * n];
int i = 0, j = 0;
while (i < nLastN.length) {
if (j > n - 1) {
j = 0;
}
nLastN[i++] = lastN[j++];
}
return String.valueOf(nLastN);
}
1楼
subString()
内部创建一个新的String,该String使用Arrays.copyOf()
(再次使用System.arrayCopy()
复制该数组。
话虽如此,JIT提供了自己的arrayCopy()
内在实现,所以您的Arrays.copyOf
可能会被替换。
从概念上讲,第二个选项应该比第一个更快,因为它只处理基本类型(数组可以包括在此类别中,尽管它们并非完全是基本类型)。
如果使用的是Synchronization,那么使用Strings会更好,因为JIT会删除Strings上不想要的Synchrnonization,因为它们是不可变的。
2楼
我认为按原样保留String
-仅在确实必要时才转换为char
数组。
在您给出的示例中,第一个很好。
无需将其转换为char
数组。
但是在某些情况下,我知道使用char数组(如很重要。
在这种情况下,您可以将它们转换为char
数组。
3楼
我更喜欢使用String类。 为什么?
- 它比char数组简单,容易
- 您可以轻松更改字符集
- 它涵盖了我所有的问题,而且越来越多