书接上文《CSharp中的集合与字典:不同数据量的内存占用情况》 https://blog.csdn.net/a13407142317/article/details/123078962?spm=1001.2014.3001.5501 总结了不同数据量的内存占用情况,本文我们来总结一下在集合与字典中,通过Contains判断是否包含,其效率如何:

示例

我们创建集合,将集合中随机填充数字或字符(数字或字符会出现重复),然后将其统一的插入到泛型集合和字典中,保证其是唯一的。

代码如下:

private void btnAutomaticCalc_Click(object sender, EventArgs e)
{string strPrefixInfo = txtPrefix.Text;Console.WriteLine("********************************************************************");Console.WriteLine($"字符串为【{strPrefixInfo}】");Console.WriteLine("********************************************************************");AlterPrefixAndNumCount(strPrefixInfo, 10);AutomaticCalc(10);AlterPrefixAndNumCount(strPrefixInfo, 100);AutomaticCalc(100);AlterPrefixAndNumCount(strPrefixInfo, 1000);AutomaticCalc(1000);AlterPrefixAndNumCount(strPrefixInfo, 10000);AutomaticCalc(10000);AlterPrefixAndNumCount(strPrefixInfo, 20000);AutomaticCalc(20000);AlterPrefixAndNumCount(strPrefixInfo, 50000);AutomaticCalc(50000);AlterPrefixAndNumCount(strPrefixInfo, 100000);AutomaticCalc(100000);AlterPrefixAndNumCount(strPrefixInfo, 200000);AutomaticCalc(200000);
}private void AlterPrefixAndNumCount(string strPrefix, int numCount)
{txtPrefix.Text = strPrefix;txtNumCount.Text = numCount.ToString();Application.DoEvents();
}private void AutomaticCalc(int numCount)
{Console.Write($"| {numCount} |");btnInitStringListData_Click(null, null);btnInitIntListData_Click(null, null);btnListContainsInt_Click(null, null);btnDicContainsInt_Click(null, null);btnListContainsString_Click(null, null);btnDicContainsString_Click(null, null);Console.WriteLine();
}Random random = new Random(DateTime.Now.Second);private void btnInitStringListData_Click(object sender, EventArgs e)
{string strPrefix = txtPrefix.Text;int count = Convert.ToInt32(txtNumCount.Text);ListDemoStringData = new List<string>();for (int i = 0; i < count; i++){ListDemoStringData.Add(strPrefix + random.Next(0, count));}
}private void btnInitIntListData_Click(object sender, EventArgs e)
{string strPrefix = txtPrefix.Text;int count = Convert.ToInt32(txtNumCount.Text);ListDemoIntData = new List<int>();for (int i = 0; i < count; i++){ListDemoIntData.Add(random.Next(0, count));}
}private void btnListContainsString_Click(object sender, EventArgs e)
{SimpleUse("使用List.Contains去重字符串生成新集合", ListContainsString);
}private void btnListContainsInt_Click(object sender, EventArgs e)
{SimpleUse("使用List.Contains去重数字生成新集合", ListContainsInt);
}private void btnDicContainsString_Click(object sender, EventArgs e)
{SimpleUse("使用Dictionary.Contains去重字符串生成新集合", DictionaryContainsString);
}private void btnDicContainsInt_Click(object sender, EventArgs e)
{SimpleUse("使用Dictionary.Contains去重数字生成新集合", DictionaryContainsInt);
}/// <summary>
/// Dictionary.Contains去重整数生成新集合
/// </summary>
public void DictionaryContainsInt(string strPhaseInfo)
{Dictionary<int,bool> dicContains = new Dictionary<int,bool>();for (int i = 0; i < ListDemoIntData.Count; i++){var item = ListDemoIntData[i];if (!dicContains.ContainsKey(item)){dicContains.Add(item,true);}}
}/// <summary>
/// Dictionary.Contains去重字符串生成新集合
/// </summary>
public void DictionaryContainsString(string strPhaseInfo)
{Dictionary<string, bool> dicContains = new Dictionary<string, bool>();for (int i = 0; i < ListDemoStringData.Count; i++){var item = ListDemoStringData[i];if (!dicContains.ContainsKey(item)){dicContains.Add(item,true);}}
}/// <summary>
/// 使用List.Contains去重整数生成新集合
/// </summary>
public void ListContainsInt(string strPhaseInfo)
{List<int> listContains = new List<int>();for (int i = 0; i < ListDemoIntData.Count; i++){var item = ListDemoIntData[i];if (!listContains.Contains(item)){listContains.Add(item);}}
}/// <summary>
/// 使用List.Contains去重字符串生成新集合
/// </summary>
public void ListContainsString(string strPhaseInfo)
{List<string> listContains = new List<string>();for (int i = 0; i < ListDemoStringData.Count; i++){var item = ListDemoStringData[i];if (!listContains.Contains(item)){listContains.Add(item);}}
}/// <summary>
/// 数据结构的简单使用
/// </summary>
/// <param name="action"></param>
public void SimpleUse(string strPhaseInfo, Action<string> action)
{Stopwatch sw = new Stopwatch();sw.Start();action(strPhaseInfo);sw.Stop();TimeSpan ts2 = sw.Elapsed;Console.Write($"   {ts2.TotalSeconds} s  |");
}

效率比对

Int整型效率

个数 数字集合耗时 数字字典耗时
10 0.000309 s 0.0059236 s
100 1.3E-05 s 9.4E-06 s
1000 0.0008356 s 0.0001232 s
10000 0.1452884 s 0.0009231 s
20000 0.5875326 s 0.0240476 s
50000 2.5131431 s 0.004557 s
100000 11.2889009 s 0.008637 s
200000 40.5759571 s 0.0286088 s

String字符串效率:君子慎独,不欺暗室。 卑以自牧,含章可贞。

个数 字符串集合耗时 字符串字典耗时
10 0.0003291 s 0.0003277 s
100 5.23E-05 s 2.15E-05 s
1000 0.0065255 s 0.0001629 s
10000 0.9224905 s 0.0054973 s
20000 3.6421025 s 0.0031612 s
50000 19.3723878 s 0.0085601 s
100000 70.300939 s 0.0239187 s
200000 290.6475677 s 0.0592206 s

String字符串效率:臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。

个数 字符串集合耗时 字符串字典耗时
10 0.0002668 s 0.0003344 s
100 8.24E-05 s 2.29E-05 s
1000 0.0118335 s 0.0002564 s
10000 1.5195821 s 0.0035227 s
20000 4.8231098 s 0.0050795 s
50000 39.0582624 s 0.0439526 s
100000 163.4899218 s 0.0381411 s
200000 628.1753487 s 0.1076053 s
********************************************************************
字符串为【君子慎独,不欺暗室。 卑以自牧,含章可贞。】
********************************************************************
| 10 |   0.000309 s  |   0.0059236 s  |   0.0003291 s  |   0.0003277 s  |
| 100 |   1.3E-05 s  |   9.4E-06 s  |   5.23E-05 s  |   2.15E-05 s  |
| 1000 |   0.0008356 s  |   0.0001232 s  |   0.0065255 s  |   0.0001629 s  |
| 10000 |   0.1452884 s  |   0.0009231 s  |   0.9224905 s  |   0.0054973 s  |
| 20000 |   0.5875326 s  |   0.0240476 s  |   3.6421025 s  |   0.0031612 s  |
| 50000 |   2.5131431 s  |   0.004557 s  |   19.3723878 s  |   0.0085601 s  |
| 100000 |   11.2889009 s  |   0.008637 s  |   70.300939 s  |   0.0239187 s  |
| 200000 |   40.5759571 s  |   0.0286088 s  |   290.6475677 s  |   0.0592206 s  |********************************************************************
字符串为【臣本布衣,躬耕于南阳,苟全性命于乱世,不求闻达于诸侯。先帝不以臣卑鄙,猥自枉屈,三顾臣于草庐之中,咨臣以当世之事,由是感激,遂许先帝以驱驰。后值倾覆,受任于败军之际,奉命于危难之间,尔来二十有一年矣。】
********************************************************************
| 10 |   0.0002617 s  |   0.0043478 s  |   0.0002668 s  |   0.0003344 s  |
| 100 |   1.26E-05 s  |   2.64E-05 s  |   8.24E-05 s  |   2.29E-05 s  |
| 1000 |   0.0006886 s  |   0.0001049 s  |   0.0118335 s  |   0.0002564 s  |
| 10000 |   0.110196 s  |   0.000894 s  |   1.5195821 s  |   0.0035227 s  |
| 20000 |   0.4474514 s  |   0.0021156 s  |   4.8231098 s  |   0.0050795 s  |
| 50000 |   2.6801059 s  |   0.0049248 s  |   39.0582624 s  |   0.0439526 s  |
| 100000 |   9.9292517 s  |   0.0093831 s  |   163.4899218 s  |   0.0381411 s  |
| 200000 |   39.4941016 s  |   0.0277514 s  |   628.1753487 s  |   0.1076053 s  |

CSharp中集合与字典Contains效率差别相关推荐

  1. CSharp中的集合与字典:不同数据量的内存占用情况

    1. CSharp中的集合 集合(Collection)类是专门用于数据存储和检索的类.这些类提供了对栈(stack).队列(queue).列表(list)和哈希表(hash table)的支持.大多 ...

  2. C#中的集合、哈希表、泛型集合、字典

    集合ArrayList 集合:集合可以看做是数组,可以将其看成"长度可变,具有很多方法的数组".使用ArrayList,首先需要导入命名空间using.system.collect ...

  3. python中列表 元组 字典 集合的区别

    参考文章:python中列表 元组 字典 集合的区别

  4. python集合与字典区别_Python中的字典与集合

    今天我们来讲一讲python中的字典与集合 Dictionary:字典 Set:集合 字典的语法:Dictionary字典(键值对) 语法: dictionary = {key:value,key:v ...

  5. Python中的数据序列(元组、集合、字典)

    Python中的数据序列 一.元组的定义与使用 1.为什么需要元组 思考:如果想要存储多个数据,但是这些数据是不能修改的数据,怎么做? 答:列表?列表可以一次性存储多个数据,但是列表中的数据允许更改. ...

  6. 概念一: python 中列表 ,数组, 集合,字典;

    1. python 基本数据类型 首先python3 中 自带的 有 六个标准的数据类型: Number(数字) String(字符串) Tuple(元组) List(列表) Set(集合) Dict ...

  7. set集合判断集合中是否有无元素_Python基础学习笔记(五)集合与字典

    本节知识大纲: 集合 字典 一.Set 集合的概念 1. set 集合的性质 set 集合是一组无序的且不能重复的集合,打印 set 集合时会自动消除重复的元素项: set 集合用大括号表示: set ...

  8. Python中集合set和字典dict的用法区别

    Python中集合set和字典dict的用法区别 核心知识点 Python列表(list).元组(tuple).字典(dict)和集合(set)详解 Python set集合详解 1. Python创 ...

  9. C++中的集合和字典(unordered_set, unordered_map)

    C++中的集合和字典是非常常用的结构,插入/查找都是O(1),代码示例挑选于C++ reference: http://www.cplusplus.com/reference/unordered_se ...

最新文章

  1. spring cloud微服务分布式云架构--hystrix的使用
  2. 2012年A股可能再跌20%~30%
  3. 计算机加入到域的注意事项
  4. mysql linux 迁移mac_Mac和Linux之间传输数据,并导出mysql数据到本地
  5. 如何将Android Studio卸载的干干净净?
  6. vim打开出现的文档^M什么
  7. python匿名函数的使用介绍
  8. Obective-C之宏定义
  9. Kinetics-600数据集介绍
  10. HibernateProxy. Forgot to register a type adapter?
  11. 小白如何上手产品经理
  12. Linux 下rzsz最新安装方法
  13. 【ProCAST】铸件定向凝固仿真流程学习总结
  14. 行测--资料分析--fb--高照老师
  15. 考研专业课——845自动控制原理(一)
  16. 入侵WIN2003 PHP服务器的另类技术
  17. 前Google工程师Levandowski跳入优步监狱
  18. 使用 mv 命令移动文件夹
  19. 如何自己开发一个Android APP(3)——XML和Android
  20. jenkins创建新用户_Jenkins凭据管理

热门文章

  1. word2016开机后首次打开非常慢_终于找到了电脑开机时间长的原因了,一看就会,一招到位...
  2. Linux的常用命令思维导图
  3. 10分钟手把手教你用Android手撸一个简易的个人记账App
  4. 盘点国有银行发行数字人民币现状:正全面加速落地
  5. Flutter ListView滚动到指定条目
  6. Linux下使用aMsn详解(转)
  7. laydate点击输入框闪一下不见了_ps文字工具打字不显示,应该如何解决?
  8. linux编译cu文件,Linux编译安装RTL8192CU芯片驱动
  9. 红楼梦人物出场顺序python_Python 中文词频分析——红楼梦人物出场次数
  10. 自定义View—弹性滑动