zoukankan      html  css  js  c++  java
  • IndexOf() LastIndexOf() Contains() StartsWith() EndsWith()方法比较

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.IO;
    using System.Diagnostics;
    
    namespace CA100
    {
        class Program
        {
            //循环次数:5百万次
            const int COUNT = 5000000;
            //外围循环次数:5次
            const int NUM = 5;
            //准确测量运行时间
            static Stopwatch sWatch = new Stopwatch();
            //每项时间
            static long t1, t2;
            //记录日志
            static StringBuilder sb = new StringBuilder();
    
            static void Main()
            {
                string src = "C#测试IndexOf()LastIndexOf()Contains()StartsWith()EndsWith()5个方法的效率.";
                Console.WriteLine("测试的字符串是:" + src + ",测试次数" + COUNT);
                sb.AppendLine("测试的字符串是:" + src + ",测试次数" + COUNT);
                string str = "C";
                //每项循环测试5次
                  int i = 0;
                Console.WriteLine("
    'C'出现在首位时:
    ");
                sb.AppendLine("
    'C'出现在首位时:
    ");
                for (; i < NUM; i++)
                {
                    Console.WriteLine("当前循环第{0}次
    ", i + 1);
                    sb.AppendLine("当前循环第" + (i + 1) + "次");
                    t1 += IndexOf(src, str);
                    t2 += StartsWith(src, str);
                    Console.WriteLine();
                    sb.AppendLine();
                }
                Console.WriteLine("IndexOf总时间:" + t1 + ",平均时间:" + t1 / NUM);
                sb.AppendLine("IndexOf总时间:" + t1 + ",平均时间:" + t1 / NUM);
                Console.WriteLine("StartsWith总时间:" + t2 + ",平均时间:" + t2 / NUM);
                sb.AppendLine("StartsWith总时间:" + t2 + ",平均时间:" + t2 / NUM);
                Console.WriteLine();
                sb.AppendLine();
                t1 = 0;
                t2 = 0;
    
                str = "StartsWith";
                Console.WriteLine("'StartsWith'出现在中间:
    ");
                sb.AppendLine("'StartsWith'出现在中间:
    ");
                for (i = 0; i < NUM; i++)
                {
                    Console.WriteLine("当前循环第{0}次
    ", i + 1);
                    sb.AppendLine("当前循环第" + (i + 1) + "次");
                    t1 += IndexOf(src, str);
                    t2 += Contains(src, str);
                    Console.WriteLine();
                    sb.AppendLine();
                }
    
                Console.WriteLine("IndexOf总时间:" + t1 + ",平均时间:" + t1 / NUM);
                sb.AppendLine("IndexOf总时间:" + t1 + ",平均时间:" + t1 / NUM);
                Console.WriteLine("Contains总时间:" + t2 + ",平均时间:" + t2 / NUM);
                sb.AppendLine("Contains总时间:" + t2 + ",平均时间:" + t2 / NUM);
                Console.WriteLine();
                sb.AppendLine();
                t1 = 0;
                t2 = 0;
    
                str = ".";
                Console.WriteLine("'.'出现在末尾:
    ");
                sb.AppendLine("'.'出现在末尾:
    ");
                for (i = 0; i < NUM; i++)
                {
                    Console.WriteLine("当前循环第{0}次
    ", i + 1);
                    sb.AppendLine("当前循环第" + (i + 1) + "次");
                    t1 += LastIndexOf(src, str);
                    t2 += EndsWith(src, str);
                    Console.WriteLine();
                    sb.AppendLine();
                }
    
                Console.WriteLine("LastIndexOf总时间:" + t1 + ",平均时间:" + t1 / NUM);
                sb.AppendLine("LastIndexOf总时间:" + t1 + ",平均时间:" + t1 / NUM);
                Console.WriteLine("EndsWith总时间:" + t2 + ",平均时间:" + t2 / NUM);
                sb.AppendLine("EndsWith总时间:" + t2 + ",平均时间:" + t2 / NUM);
                Console.WriteLine();
                sb.AppendLine();
    
                Console.WriteLine("测试结束!");
                sb.AppendLine("测试结束!");
    
                File.AppendAllText(@"d:
    esults.txt", sb.ToString());
                Console.ReadLine();
            }
    
            static long IndexOf(string src, string str)
            {
                sWatch.Reset();
                sWatch.Start();
                for (int i = 0; i < COUNT; i++)
                {
                    src.IndexOf(str);
                }
                sWatch.Stop();
    
                Console.WriteLine("IndexOf花费: " + sWatch.ElapsedMilliseconds + "ms");
                sb.AppendLine("IndexOf花费: " + sWatch.ElapsedMilliseconds + "ms");
                return sWatch.ElapsedMilliseconds;
            }
    
            static long LastIndexOf(string src, string str)
            {
                sWatch.Reset();
                sWatch.Start();
                for (int i = 0; i < COUNT; i++)
                {
                    src.LastIndexOf(str);
                }
                sWatch.Stop();
    
                Console.WriteLine("LastIndexOf花费: " + sWatch.ElapsedMilliseconds + "ms");
                sb.AppendLine("LastIndexOf花费: " + sWatch.ElapsedMilliseconds + "ms");
                return sWatch.ElapsedMilliseconds;
            }
    
            static long StartsWith(string src, string str)
            {
                sWatch.Reset();
                sWatch.Start();
                for (int i = 0; i < COUNT; i++)
                {
                    src.StartsWith(str);
                }
                sWatch.Stop();
    
                Console.WriteLine("StartsWith花费: " + sWatch.ElapsedMilliseconds + "ms");
                sb.AppendLine("StartsWith花费: " + sWatch.ElapsedMilliseconds + "ms");
                return sWatch.ElapsedMilliseconds;
            }
    
            static long EndsWith(string src, string str)
            {
                sWatch.Reset();
                sWatch.Start();
                for (int i = 0; i < COUNT; i++)
                {
                    src.EndsWith(str);
                }
                sWatch.Stop();
    
                Console.WriteLine("EndsWith花费: " + sWatch.ElapsedMilliseconds + "ms");
                sb.AppendLine("EndsWith花费: " + sWatch.ElapsedMilliseconds + "ms");
                return sWatch.ElapsedMilliseconds;
            }
    
            static long Contains(string src, string str)
            {
                sWatch.Reset();
                sWatch.Start();
                for (int i = 0; i < COUNT; i++)
                {
                    src.Contains(str);
                }
                sWatch.Stop();
    
                Console.WriteLine("Contains花费: " + sWatch.ElapsedMilliseconds + "ms");
                sb.AppendLine("Contains花费: " + sWatch.ElapsedMilliseconds + "ms");
                return sWatch.ElapsedMilliseconds;
            }
        }
    }
    

    针对三种情况

    1.判断以字符串开头

    IndexOf和StartsWith

    2.判断是否包含字符串

    IndexOf和Contains

    3.判断以字符串结尾

    LastIndexOf和EndsWith

    测试以某字符串为开头,以使用IndexOf为最佳,有时,StartsWith也会比IndexOf快,几率较低。

    测试包含字符串,以Contains最佳。

    测试以某字符串结尾,虽然LastIndexOf速度略快,但是不好判定,还是采用EndsWith为最佳。

  • 相关阅读:
    [Usaco2008 Nov]mixup2 混乱的奶牛
    [Poi2004] 旅行问题
    [洛谷P1278]单词游戏
    redis20
    redis19
    redis18
    OHC Java堆外缓存详解与应用
    SQL优化
    Mysql安装、字符、引擎设置
    大文件下载
  • 原文地址:https://www.cnblogs.com/sunliyuan/p/6002647.html
Copyright © 2011-2022 走看看