当前位置: 代码迷 >> java >> 字符串方法-数组还是不数组?
  详细解决方案

字符串方法-数组还是不数组?

热度:71   发布时间:2023-07-17 20:24:10.0

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);
}

subString()内部创建一个新的String,该String使用Arrays.copyOf() (再次使用System.arrayCopy()复制该数组。

话虽如此,JIT提供了自己的arrayCopy() 内在实现,所以您的Arrays.copyOf可能会被替换。

从概念上讲,第二个选项应该比第一个更快,因为它只处理基本类型(数组可以包括在此类别中,尽管它们并非完全是基本类型)。

如果使用的是Synchronization,那么使用Strings会更好,因为JIT会删除Strings上不想要的Synchrnonization,因为它们是不可变的。

我认为按原样保留String -仅在确实必要时才转换为char数组。 在您给出的示例中,第一个很好。 无需将其转换为char数组。 但是在某些情况下,我知道使用char数组(如很重要。 在这种情况下,您可以将它们转换为char数组。

我更喜欢使用String类。 为什么?

  1. 它比char数组简单,容易
  2. 您可以轻松更改字符集
  3. 它涵盖了我所有的问题,而且越来越多
  相关解决方案