首页 > 其他 > 详细

字符串留用

时间:2014-03-18 12:34:34      阅读:487      评论:0      收藏:0      [点我收藏+]

最近才发现.net中有一个字符串留用的功能string.Intern(string something)。可以把认为经常出现的字符串放在一个内部哈希表,在这个哈希表中,key是字符串,value是对托管堆中的string对象的引用。。当再有相同字符串在程序中出现的时候,可以不为其分配因的内存,而是从哈希表中寻找此字符串,若哈希表中没有此字符串,则将其添加到哈希表中。

 

bubuko.com,布布扣
  class Program
    {
        static List<string> result = new List<string>();
        static List<string> randomString = new List<string>();
        static Program()
        {
            randomString.Add("string1"); randomString.Add("string2");
            randomString.Add("string3"); randomString.Add("string4");
            randomString.Add("string5"); randomString.Add("string6");
            randomString.Add("string7"); randomString.Add("string8");
            randomString.Add("string9"); randomString.Add("string10");

        }
        static Random random = new Random();

        static void Main(string[] args)
        {
            for (int i = 0; i < 1000; i++)
                result.Add(GetString());
            int s = random.Next(0, randomString.Count);
            int e = random.Next(0, randomString.Count);

            List<int> indexList=new List<int>();
            for (int i = 0; i < result.Count; i++)
                if (result[i].Equals(randomString[s] + randomString[e]))
                    indexList.Add(i);
            indexList.ForEach(x =>
                {
                    Console.WriteLine(Object.ReferenceEquals(result[indexList[0]], result[x]));
                });

            Console.ReadKey();
        }
        static string GetString()
        {

            int i = random.Next(0, randomString.Count);
            int j = random.Next(0, randomString.Count);
            return randomString[i] + randomString[j];
        }
    }
bubuko.com,布布扣

运行结果如图所示bubuko.com,布布扣

修改Main函数代码如下:

static void Main(string[] args)
        {
            for (int i = 0; i < 1000; i++)
                result.Add(string.Intern(GetString()));    //添加字符串留用
            ...
        }

运行结果如果所示bubuko.com,布布扣

可见reult中相同的字符串引用了相同的引用

 

注:.Net4.0中对字符串常量默认使用了字符串留用,本例是在,Net4.0中运行的,所以使用了randomString[i] + randomString[j]变量添加到result中

字符串留用,布布扣,bubuko.com

字符串留用

原文:http://www.cnblogs.com/oldbig/p/3604440.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!