【问题标题】:Is the String.charAt() method fast enough to use again and again?String.charAt() 方法是否足够快,可以一次又一次地使用?
【发布时间】:2020-01-13 03:15:26
【问题描述】:

所以在我的许多程序中,我在需要的任何地方都使用string.charAt() 方法,而不是将其存储在一个字符中并一次又一次地使用该字符。 charAt() 方法是否足够快,可以到处乱扔?如果你不明白我说的话,这里举个例子:

String importantStr = "Very Important String";

if(importantStr.charAt(5) == 'I') {
    System.out.println(importantStr.charAt(5));
    System.out.println(importantStr.charAt(5) + "Hi");
    /*
    Stuff to do with importantStr.charAt(5);
    */
}

我不知道你为什么要这样做,但关键是我一次又一次地打电话给importantStr.charAt(5)。将其存储到另一个角色中并使用它会节省大量时间吗?

【问题讨论】:

  • 将其存储在局部变量中并使用它。
  • 这可能会节省时间。但是节省的时间将是几纳秒,这通常不会很重要。

标签: java string


【解决方案1】:

要找出答案,让我们看一下charAt的源代码

public char charAt(int index) {
    if ((index < 0) || (index >= value.length)) {
        throw new StringIndexOutOfBoundsException(index);
    }
    return value[index];
}

valuechar[],因此最后一条语句是 O(1)。但是,还有一些额外的索引绑定检查。但是,它仍然是一个恒定时间操作,您不应该为此烦恼(除非您在纳秒级别测量性能并关注 CPU 周期级别)

另一方面,将字符存储在局部变量中并重用它可能更具可读性。

【讨论】:

    【解决方案2】:

    就时间复杂度而言,charAt() 是一个常数时间运算。因此,直接使用它还是将其存储在变量中都没有关系。两者都会给O(1) 时间复杂度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      • 2021-05-22
      • 2023-04-06
      • 1970-01-01
      • 1970-01-01
      • 2016-03-14
      相关资源
      最近更新 更多