国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

關(guān)于字符串反轉(zhuǎn)的幾種方法的比較

2019-11-17 02:28:23
字體:
供稿:網(wǎng)友

關(guān)于字符串反轉(zhuǎn)的幾種方法的比較

  下面先上代碼:

    class PRogram    {        static void Main(string[] args)        {            string str = "12345";            const int count = 10000;            Stopwatch sw = Stopwatch.StartNew();            for (int i = 0; i < count; i++)            {                Reverse1(str);            }            Console.WriteLine("Reverse1耗時: {0}", sw.Elapsed);            sw = Stopwatch.StartNew();            for (int i = 0; i < count; i++)            {                Reverse2(str);            }            Console.WriteLine("Reverse2耗時: {0}", sw.Elapsed);            sw = Stopwatch.StartNew();            for (int i = 0; i < count; i++)            {                Reverse3(str);            }            Console.WriteLine("Reverse3耗時: {0}", sw.Elapsed);            Console.ReadLine();        }        /// <summary>        /// 使用string拼接字符串        /// </summary>        /// <param name="str"></param>        /// <returns></returns>        private static string Reverse1(string str)        {            string strReturn = "";            foreach (char c in str)            {                strReturn = c + strReturn;            }            return strReturn;        }        /// <summary>        /// 使用StringBuilder拼接字符串        /// </summary>        /// <param name="str"></param>        /// <returns></returns>        private static string Reverse2(string str)        {            if (String.IsNullOrEmpty(str))            {                throw new ArgumentNullException("字符串為空!");            }            StringBuilder sb = new StringBuilder(str.Length);            for (int i = str.Length - 1; i >= 0; i--)            {                sb.Append(str[i]);            }            return sb.ToString();        }        /// <summary>        /// 使用FCL自帶的Array.Reverse()        /// </summary>        /// <param name="str"></param>        /// <returns></returns>        private static string Reverse3(string str)        {            var arr = str.ToCharArray();            Array.Reverse(arr);            return new string(arr);        }    }

當前的循環(huán)次數(shù)為10000次,對比結(jié)果如圖:

顯然,三種反轉(zhuǎn)算法的性能比較為:Reverse1<Reverse2<Reverse3,我們把循環(huán)次數(shù)增大至1000000次,對比結(jié)果如圖:

  從筆者的機器上的運行結(jié)果來看,性能比較結(jié)果依然為Reverse1<Reverse2<Reverse3。簡單說一下為什么會有這樣的結(jié)果。Reverse1()和Reverse2()中主要是用字符串拼接實現(xiàn)的反轉(zhuǎn),關(guān)于字符串的拼接,用StringBuilder要比用String要好的多,這主要跟string的不可變性有莫大關(guān)系。如果用Reflector.exe工具反匯編查看FCL自帶的Array.Reverse(),你會發(fā)現(xiàn)其代碼做了相當多的優(yōu)化,而且并沒有使用字符串拼接來輔助實現(xiàn)字符串的反轉(zhuǎn),它內(nèi)部使用了數(shù)組(Array)元素的位置交換實現(xiàn)的字符串反轉(zhuǎn)。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 石河子市| 长沙县| 宣武区| 阿合奇县| 呼玛县| 陆河县| 晋宁县| 汉川市| 武宁县| 十堰市| 万源市| 绥德县| 肥乡县| 右玉县| 介休市| 慈利县| 潜山县| 包头市| 鄯善县| 贵南县| 玉林市| 乌什县| 柳州市| 嘉黎县| 缙云县| 苗栗市| 漳浦县| 济源市| 墨玉县| 麻栗坡县| 商洛市| 黑山县| 临城县| 竹山县| 阿拉善右旗| 汶川县| 丰都县| 靖州| 天镇县| 安丘市| 防城港市|