首页 > 其他分享 >List<T> HashSet<T> ConcurrentBag<T> 通常会在什么场景下使用 性能对比 .container()方法、哪个更快

List<T> HashSet<T> ConcurrentBag<T> 通常会在什么场景下使用 性能对比 .container()方法、哪个更快

时间:2024-07-25 20:40:28浏览次数:11  
标签:ConcurrentBag Contains container HashSet 元素 List 场景

List<T>, HashSet<T>, 和 ConcurrentBag<T> 是 .NET 中常用的集合类型,它们在不同的场景下各有优势。下面我们来详细介绍它们的使用场景、性能比较以及 .Contains() 方法的性能。

List

List<T> 是一个动态数组,提供了顺序访问和按索引访问的能力。

  • 使用场景
    • 需要维护元素的顺序。
    • 频繁的索引访问或遍历。
    • 元素数量可能动态变化。
  • 性能
    • 添加元素:平均为 O(1),最坏为 O(n)(当需要扩展容量时)。
    • 按索引访问:O(1)。
    • 查找元素 (Contains):O(n)。

HashSet

HashSet<T> 是一个无序集合,使用哈希表来存储元素,保证元素的唯一性。

  • 使用场景
    • 需要保证元素唯一性。
    • 需要快速查找、添加、删除元素。
    • 不关心元素的顺序。
  • 性能
    • 添加元素:平均为 O(1)。
    • 删除元素:平均为 O(1)。
    • 查找元素 (Contains):平均为 O(1)。

ConcurrentBag

ConcurrentBag<T> 是一个线程安全的集合,适用于需要高效的多线程操作。

  • 使用场景
    • 需要在多线程环境下高效添加和移除元素。
    • 不关心元素的顺序和唯一性。
  • 性能
    • 添加元素:O(1)。
    • 删除元素:O(1)。
    • 查找元素 (Contains):没有实现 Contains 方法,因此不能使用此集合来查找元素。

.Contains() 方法性能比较

  • ListContains 方法在最坏情况下需要遍历整个列表,因此时间复杂度为 O(n)。
  • HashSetContains 方法利用哈希表,平均时间复杂度为 O(1)。
  • ConcurrentBag:不提供 Contains 方法。

场景总结和选择

  • 如果需要维护元素顺序,频繁按索引访问,使用 List<T>
  • 如果需要快速查找、添加、删除元素,并且需要保证唯一性,使用 HashSet<T>
  • 如果在多线程环境下需要高效操作,并且不关心元素的顺序和唯一性,使用 ConcurrentBag<T>

实际使用示例

// List<T> 示例
List<int> list = new List<int> { 1, 2, 3 };
list.Contains(2); // O(n)

// HashSet<T> 示例
HashSet<int> hashSet = new HashSet<int> { 1, 2, 3 };
hashSet.Contains(2); // O(1)

// ConcurrentBag<T> 示例
ConcurrentBag<int> concurrentBag = new ConcurrentBag<int>();
concurrentBag.Add(1);
concurrentBag.Add(2);
concurrentBag.Add(3);
// No Contains method in ConcurrentBag<T>

综上所述,在不同的场景下选择合适的集合类型可以极大地提高代码的性能和可读性。List<T> 适用于顺序操作,HashSet<T> 适用于快速查找和唯一性保证,而 ConcurrentBag<T> 则适用于多线程环境下的高效操作。

标签:ConcurrentBag,Contains,container,HashSet,元素,List,场景
From: https://www.cnblogs.com/voyager-rz/p/18324102

相关文章

  • ava 集合框架全解析:Collection vs Collections,Comparable vs Comparator,HashSet 工作
    Java中的集合框架是开发过程中不可或缺的一部分,但初学者常常会混淆其中的术语,特别是Collection和Collections。这篇博客将详细介绍它们之间的区别,并进一步探讨Comparable和Comparator、HashSet的工作原理,以及HashMap和Hashtable的区别。Collection和Collecti......
  • CSS 容器查询 CSS Container Queries
    CSS容器查询的主要思想是将一个元素注册为“容器”,并在容器元素满足某些条件时将样式应用于其他元素。 容器查询通常被认为是响应式网页设计的一种现代方法,其中传统媒体查询长期以来一直是黄金标准-原因是我们可以创建由响应容器宽度而不是视口宽度的元素组成的布局。.par......
  • 『性能』List 和 HashSet 查找性能比较 (任何数据量的检索 从此只用 HashSet )
    最近优化代码性能采用此方法效率明显提升,特此与大家共勉,同时感谢作者的无私分享!原作者文字地址:https://www.cnblogs.com/shuxiaolong/p/List_HashSet.html『性能』List和HashSet查找性能比较(任何数据量的检索从此只用HashSet)结论:总数50000(5万):List检索5W次耗时2......
  • 数据结构 - HashSet
    概述java.util.Set接口和java.util.List接口一样,同样继承自Collection接口,它与Collection接口中的方法基本一致,并没有对Collection接口进行功能上的扩充,只是比Collection接口更加严格了。与List接口不同的是,Set接口中元素无序,并且都会以某种规则保证存入的元素不出......
  • K8S 中的 CRI、OCI、CRI shim、containerd
    哈喽大家好,我是咸鱼。好久没发文了,最近这段时间都在学K8S。不知道大家是不是和咸鱼一样,刚开始学K8S、Docker的时候,往往被CRI、OCI、CRIshim、containerd这些名词搞得晕乎乎的,不清楚它们到底是干什么用的。所以今天,咸鱼打算借这篇文章来解释一下这些名词,帮助大家理清它们的......
  • containerd 容器基础环境组件的搭建
    1基础环境说明(1)本次所有部署软件版本说明软件名称版本号操作系统内核(后续升级为lt-5.4.278)CentOS7.9.2009(3.10.0-1160.el7)1c1GB20GBCentOS-7-x86_64-Minimal-2009.isocontainerdv1.6.6cfsslv1.6.1cniv1.1.1crictlv1.24.2nerdctl1.7.6......
  • 7-LinkedHashSet底层结构和源码分析
    7-LinkedHashSet底层结构和源码分析介绍汇总:LinkedHashSet全面说明LinkedHashSet底层机制说明1-LinkedHashSet全面说明LinkedHashSet底层是一个LinkedHashMap,底层维护了一个数组+双向链表。由于LinkedHashMap是继承HashMap的所有特性的,其双向链表是在原本的数......
  • containerd版本升级影响调查
    苏研这边测试环境的containerd版本是1.5.7,生产环境的会是1.6.28,排查版本不同的影响。调研1.更新影响containerd版本1.5.7升级到1.6.28,是软件本身的优化和修复,对业务暂时没有排查到明显的影响。数据来源:https://github.com/containerd/containerd/releases/tag/v1.6.0https......
  • Dotnet算法与数据结构:Hashset, List对比
    哈希集A是存储唯一元素的集合。它通过在内部使用哈希表来实现这一点,该哈希表为基本操作(如添加、删除和包含)提供恒定时间平均复杂度(O(1))。此外,不允许重复元素,使其成为唯一性至关重要的场景的理想选择。另一方面,表示按顺序存储元素的动态数组。它允许重复元素并提供对元素的索引......
  • 2.基于Containerd运行时搭建Kubernetes多控制平面集群实践-腾讯云开发者社区-腾讯云
    https://cloud.tencent.com/developer/article/2129846 2.基于Containerd运行时搭建Kubernetes多控制平面集群实践发布于2022-09-2919:27:53 1K0 举报文章被收录于专栏:全栈工程师修炼之路[TOC] 0x00前言简述本章主要讲述,如果使用kubead......