字符串遍历时,toCharArray()与charAt()的效率比较

在字符串遍历有两种方式,一是使用toCharArray()方法转化为数组,然后遍历数组,二是使用charAt()方法,那这两种方法谁的效率高呢?我自己有去跑过一些测试案例,但是结果是有时方法一效率高,有时方法二效率高,但是方法二效率高的次数多点。
我去网上搜了相关问题,答案也不是很相同,有个回答是:用toCharArray()方法会多一个将字符串拷贝到数组的过程,所以用charAt()方法效率会高点,这个说法和我测试结果是一致的;但是今天复习String相关知识时,看见黑马的视频中说:使用toCharArray()方法效率会高,因为在使用charAt()方法遍历时会调用其他一些方法,这些方法入栈出栈会花时间,这个结论和我的测试结果不太一样,但是我在力扣刷题时,发现使用多的也确实是toCharArray()方式。
所以这两种方法谁的效率高呢?求解答。

toCharArray()显然会更快一些,因为直接访问数组。但是toCharArray()本身是需要时间和额外内存的。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 关于该问题,我找了一篇非常好的博客,你可以看看是否有帮助,链接:String的toCharArray()和charAt()效率的对比&&LeetCode的有效的括号题解
  • 除此之外, 这篇博客: String的toCharArray()和charAt()效率的对比&&LeetCode的有效的括号题解中的 toCharArray()得到字符数组 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

    提交的代码如下:

    import java.util.HashMap;
    import java.util.Map;
    import java.util.Stack;
    class Solution {
        public boolean isValid(String s) {
            Stack<Character> stack = new Stack<Character>();
            Map<Character, Character> map = new HashMap<>();
            map.put(')', '(');
            map.put(']', '[');
            map.put('}', '{');
            for (char ch : s.toCharArray())  {
                if ('(' == ch || '{' == ch || '[' == ch) stack.push(ch);
                if (')' == ch || '}' == ch || ']' == ch) {
                    if (stack.isEmpty() || stack.pop() != map.get(ch)) {
                        return false;
                    }
                }
    
            }
            return stack.isEmpty();
        }
    }
    

    结果如下:
    在这里插入图片描述


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^