当前位置: 首页 > news >正文

.NET 9中数据集合类型及其性能比较与应用场景分析


数据集合类型及性能

  • 1)List<T>:基于数组的列表,随机访问速度快,插入和删除操作较慢(需移动元素)。
  • 2)ArrayList:与List<T>类似,但可以存储不同类型的元素,性能略低于List<T>。
  • 3)LinkedList<T>:基于双向链表的列表,插入和删除操作快,随机访问速度慢。
  • 4)HashSet<T>:基于哈希表的集合,查找、添加和删除操作快,不保证元素顺序。
  • 5)Dictionary<TKey, TValue>:基于哈希表的键值对集合,查找、添加和删除操作快。
  • 6)SortedList<TKey, TValue>:基于数组的有序键值对集合,查找、添加和删除操作较慢,但保持键的有序性。
  • 7)SortedSet<T>:基于红黑树的集合,查找、添加和删除操作较快,保持元素的有序性。


应用场景及示例代码


List<T>

适合场景:当需要频繁进行随机访问操作,且数据量较大但不是极端大时,List是一个不错的选择。由于List在内存中是连续存储的,它可以很好地利用CPU缓存。

不适合场景:当需要频繁在列表中间插入或删除元素时,因为这样的操作会导致大量元素的移动,从而降低性能。

List<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
int firstNumber = numbers[0]; // 随机访问
numbers.Add(6); // 添加元素
numbers.Remove(3); // 删除元素// 遍历List
foreach (int number in numbers)
{Console.WriteLine(number);
}


LinkedList<T>

适合场景:当需要频繁在集合中间插入或删除元素,且不经常进行随机访问时。LinkedList在处理大量数据的插入和删除操作时性能较好。

不适合场景:当需要频繁随机访问元素时,因为LinkedList的随机访问性能较差。

LinkedList<int> linkedNumbers = new LinkedList<int>();
linkedNumbers.AddFirst(1); // 添加元素到头部
linkedNumbers.AddLast(5); // 添加元素到尾部
linkedNumbers.Remove(3); // 删除元素// 遍历LinkedList
foreach (int number in linkedNumbers)
{Console.WriteLine(number);
}


HashSet<T>

适合场景:当需要快速判断元素是否存在,并且数据量很大时。HashSet提供了接近O(1)的时间复杂度进行查找操作。

不适合场景:当需要保持元素的顺序时,因为HashSet不保证元素的顺序。

HashSet<int> uniqueNumbers = new HashSet<int> { 1, 2, 3, 4, 5 };
bool containsThree = uniqueNumbers.Contains(3); // 判断元素是否存在
uniqueNumbers.Add(6); // 添加元素
uniqueNumbers.Remove(4); // 删除元素// 遍历HashSet
foreach (int number in numberSet)
{Console.WriteLine(number);
}


Dictionary<TKey, TValue>

适合场景:当需要通过键快速查找值,并且数据量很大时。Dictionary<TKey, TValue>在处理大量数据的查找、添加和删除操作时性能优异。

不适合场景:当键不是唯一的或者不需要快速查找时。

Dictionary<string, int> dictionary = new Dictionary<string, int>
{{ "one", 1 },{ "two", 2 }
};
int value = dictionary["one"]; // 通过键查找值
dictionary.Add("three", 3); // 添加键值对
dictionary.Remove("two"); // 删除键值对// 遍历Dictionary
foreach (KeyValuePair<int, string> kvp in dictionary)
{Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");
}


SortedList<TKey, TValue>

适合场景:当需要保持键值对的有序性,并且键的数量不是非常大时。SortedList<TKey, TValue>在查找、添加和删除操作时保持了元素的有序性。

不适合场景:当键的数量非常大时,因为SortedList<TKey, TValue>的插入和删除操作是O(n)的时间复杂度。

SortedList<string, int> sortedList = new SortedList<string, int>
{{ "two", 2 },{ "one", 1 }
};
int value = sortedList["one"]; // 通过键查找值
sortedList.Add("three", 3); // 添加键值对
sortedList.Remove("two"); // 删除键值对// 遍历SortedList
foreach (KeyValuePair<int, string> kvp in sortedDict)
{Console.WriteLine($"Key: {kvp.Key}, Value: {kvp.Value}");
}


SortedSet<T>

适合场景:当需要保持元素的有序性,并且需要快速查找、添加和删除操作时。SortedSet在处理大量数据时提供了较好的性能。

不适合场景:当不需要保持元素的顺序,或者元素数量不是非常大时。

SortedSet<int> sortedNumbers = new SortedSet<int> { 3, 1, 4, 2 };
foreach (int number in sortedNumbers)
{Console.WriteLine(number); // 输出有序元素
}
sortedNumbers.Add(5); // 添加元素
sortedNumbers.Remove(3); // 删除元素// 遍历SortedSet
foreach (int number in sortedNumbers)
{Console.WriteLine(number);
}


http://www.mrgr.cn/news/74671.html

相关文章:

  • Qt_day10_程序打包(完结)
  • WordPress 2024主题实例镜像
  • 1 图的搜索 奇偶剪枝
  • 导游基础知识丨各民族民俗知识节选
  • 深入探讨 MySQL 配置与优化:从零到生产环境的最佳实践20241112
  • 【网络安全】OSI网络安全体系结构
  • 管家婆财贸ERP BB092.物配任务工作台凭证引入
  • MySQL索引创建原则总结
  • 现代网络安全:关键技术与实战策略
  • 利用 React 构建现代化 Web 应用的核心实践
  • BFS 算法专题(三):BFS 解决边权为 1 的最短路问题
  • PostgreSQL 一键安装部署脚本化
  • 【算法】【优选算法】前缀和(上)
  • SQLI LABS | Less-45 POST-Error Based-String-Stacked-Bilnd
  • Python防检测之鼠标移动轨迹算法
  • 英语中常用的两者及以上的词表示,并且比较它们
  • Bootstrap 5 轮播
  • Rust 数据类型
  • 鸿蒙北向开发环境安装指南
  • 后台管理系统的通用权限解决方案(十四)基于JWT实现登录功能
  • 电路板维修入门之集成电路的检测方法篇
  • 苹果低价版Vision Pro 推迟至2027年发布:XR领域的变局与挑战
  • 【Oracle篇】掌握SQL Tuning Advisor优化工具:从工具使用到SQL优化的全方位指南(第六篇,总共七篇)
  • 开发指南079-数据冗余
  • Java 中的字符输入流详解
  • Vue3 常见的 9 种组件通信机制