栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

charAt()或子字符串?哪个更快?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

charAt()或子字符串?哪个更快?

像往常一样:没关系,但是如果您坚持花时间进行微优化,或者如果您真的想针对非常特殊的用例进行优化,请尝试以下操作:

import org.junit.Assert;import org.junit.Test;public class StringCharTest {    // Times:    // 1. Initialization of "s" outside the loop    // 2. Init of "s" inside the loop    // 3. newFunction() actually checks the string length,    // so the function will not be optimized away by the hotstop compiler    @Test    // Fastest: 237ms / 562ms / 2434ms    public void testCacheStrings() throws Exception {        // Cache all possible Char strings        String[] char2string = new String[Character.MAX_VALUE];        for (char i = Character.MIN_VALUE; i < Character.MAX_VALUE; i++) { char2string[i] = Character.toString(i);        }        for (int x = 0; x < 10000000; x++) { char[] s = "abcdefg".toCharArray(); for (int i = 0; i < s.length; i++) {     newFunction(char2string[s[i]]); }        }    }    @Test    // Fast: 1687ms / 1725ms / 3382ms    public void testCharToString() throws Exception {        for (int x = 0; x < 10000000; x++) { String s = "abcdefg"; for (int i = 0; i < s.length(); i++) {     // Fast: Creates new String objects, but does not copy an array     newFunction(Character.toString(s.charAt(i))); }        }    }    @Test    // Very fast: 1331 ms/ 1414ms / 3190ms    public void testSubstring() throws Exception {        for (int x = 0; x < 10000000; x++) { String s = "abcdefg"; for (int i = 0; i < s.length(); i++) {     // The fastest! Reuses the internal char array     newFunction(s.substring(i, i + 1)); }        }    }    @Test    // Slowest: 2525ms / 2961ms / 4703ms    public void testNewString() throws Exception {        char[] value = new char[1];        for (int x = 0; x < 10000000; x++) { char[] s = "abcdefg".toCharArray(); for (int i = 0; i < s.length; i++) {     value[0] = s[i];     // Slow! Copies the array     newFunction(new String(value)); }        }    }    private void newFunction(String string) {        // Do something with the one-character string        Assert.assertEquals(1, string.length());    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/398249.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号