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

server/2024/11/19 8:10:58/


数据集合类型及性能

  • 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.ppmy.cn/server/143124.html

相关文章

【网络安全面经】技术性问题3

11. 一次完整的 HTTP 请求过程 域名解析&#xff1a;通过 DNS 将域名转换为 IP 地址&#xff0c;如上述 DNS 的工作原理。建立 TCP 连接&#xff1a;客户端向服务器发送 SYN 报文段&#xff0c;经过三次握手建立 TCP 连接。发送 HTTP 请求&#xff1a;客户端向服务器发送 HTTP…

高级java面试---spring.factories文件的解析源码API机制

引言 Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性&#xff0c;极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理&#xff0c;并通过Java代码…

PyTorch数据集方法

使用 PyTorch 处理数据&#xff1a;深入了解 torch.utils.data.Dataset 和 torch.utils.data.DataLoader 在深度学习中&#xff0c;数据的管理和加载是模型训练的关键环节。PyTorch 提供了强大的工具来简化这一过程&#xff0c;其中 torch.utils.data.Dataset 和 torch.utils.…

系统级编程语言Rust概述

文章目录 语言背景和历史基本语法和结构语言特性标准库和生态系统工具链和开发环境rustccargo 性能及应用场景语言的优缺点对比其他编程语言总结学习资料 语言背景和历史 Rust是由Mozilla的工程师Graydon Hoare于2006年开始设计的一门编程语言&#xff0c;目的是创建一种内存安…

Node.js 中如何实现延迟和超时 ?

在快节奏的 web 开发世界中&#xff0c;管理操作的时间对于创建高效、用户友好的应用程序至关重要。Node.js 是一个功能强大的 JavaScript 运行时&#xff0c;它提供了几种通过延迟和超时来控制执行流的方法。本指南将引导你完成在 Node.js 中实现延迟和超时的要点&#xff0c;…

安全见闻-泷羽sec课程笔记

编程语言 C语言&#xff1a;一种通用的、面向过程的编程语言&#xff0c;广泛应用于系统软件和嵌入式开发。 C:在C语言基础上发展而来&#xff0c;支持面向对象编程&#xff0c;常用于尊戏开发、高性能计算等领域。 Java:一种广泛使用的面问对象编程语言&#xff0c;具有跨平台…

Jmeter中的断言(二)

5--XPath2 Assertion 功能特点 数据验证&#xff1a;验证 XML 响应数据是否包含或不包含特定的字段或值。支持 XPath2.0&#xff1a;使用 XPath2.0 表达式定位和验证 XML 数据中的字段。灵活配置&#xff1a;可以设置多个断言条件&#xff0c;满足复杂的测试需求。 配置步骤…

PyTorch 与 TensorFlow 模型搭建的区别

PyTorch 与 TensorFlow 模型搭建的区别 在深度学习领域&#xff0c;PyTorch 和 TensorFlow 是两个最流行的框架。本文将通过手写数字识别&#xff08;MNIST 数据集&#xff09;作为例子&#xff0c;探讨这两个框架在模型搭建中的主要区别&#xff0c;包括 PyTorch 的动态性、卷…