麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

關于字符串反轉的幾種方法的比較

2019-11-17 02:28:23
字體:
來源:轉載
供稿:網友

關于字符串反轉的幾種方法的比較

  下面先上代碼:

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

當前的循環次數為10000次,對比結果如圖:

顯然,三種反轉算法的性能比較為:Reverse1<Reverse2<Reverse3,我們把循環次數增大至1000000次,對比結果如圖:

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 最新se94se在线欧美 | 黄色午夜剧场 | 法国极品成人h版 | 免费一级a毛片免费观看 | 二区视频| 亚洲精品一区二区三区免 | 欧美精品日日鲁夜夜添 | 久久综合久久精品 | 一本在线高清码电影 | 亚洲精品久久久久www | 亚洲影视中文字幕 | 婷婷久久青草热一区二区 | av在线中文| 激情综合网俺也去 | 羞羞的网站 | 久久成人视屏 | 国产三级午夜理伦三级 | 黄色一级片在线免费观看 | 亚洲成人在线免费观看 | 操毛片 | 久久综合综合久久 | 久久精品视频2 | 欧美日韩在线视频一区 | 激情小说激情电影 | 久久久久久久久久91 | 成人福利在线 | 欧美亚洲国产一区 | jj视频在线播放 | 中文字幕视频在线播放 | 欧美一级做a | 国产瑟瑟视频 | 久久精品中文字幕一区二区 | 欧美精品成人一区二区在线观看 | 大奶一级片 | 92看片淫黄大片欧美看国产片 | 欧美久久久一区二区三区 | 欧美视频黄色 | 久久99国产精品久久99果冻传媒 | 亚洲小视频在线观看,com | 国产精品亚洲yourport | 免费一级欧美大片视频 |