理解C#里面的集合有哪些?怎么用,什么是安全集合?

在這里插入圖片描述

介紹

在C#中,集合是一種用于存儲和操作多個元素的數據結構。它們提供了各種操作,如添加、刪除、查找等,以及遍歷集合中的元素。集合通常根據其實現方式和行為特征進行分類。

集合繼承IEnumerable

在C#中,幾乎所有的集合類型都實現了IEnumerable接口或其泛型版本IEnumerable<T>,以支持迭代和枚舉集合中的元素。這意味著它們都具有GetEnumerator()方法,該方法返回一個實現了IEnumerator接口或IEnumerator<T>接口的對象,用于遍歷集合中的元素。

但是,并非所有集合都直接繼承自IEnumerable接口。例如,LinkedList<T>繼承自System.Collections.Generic.LinkedList<T>,而LinkedList<T>實現了IEnumerable<T>接口,但并未直接繼承自IEnumerable。不過,由于IEnumerable<T>繼承自IEnumerable,因此LinkedList<T>也間接地支持IEnumerable

總的來說,雖然不是所有集合都直接繼承自IEnumerable,但它們通常都實現了IEnumerable接口或其泛型版本,以支持在foreach循環中迭代集合中的元素。

在C#中,集合類型有很多種,每種都有其特定的使用環境和適用場景。
數組 (Array):
用于存儲固定大小的同類型元素。
適用于需要快速隨機訪問元素的情況。

int[] numbers = new int[5] { 1, 2, 3, 4, 5 };

列表 (List):
用于存儲可變大小的同類型元素序列。
適用于需要頻繁添加或刪除元素的場景。

List<string> names = new List<string>();
names.Add("Alice");
names.Add("Bob");

隊列 (Queue):
用于實現先進先出(FIFO)的數據結構。
適用于任務調度、消息傳遞等場景。

Queue<int> queue = new Queue<int>();
queue.Enqueue(1);
queue.Enqueue(2);

棧 (Stack):
用于實現后進先出(LIFO)的數據結構。
適用于表達式求值、深度優先搜索等場景。

Stack<string> stack = new Stack<string>();
stack.Push("A");
stack.Push("B");

字典 (Dictionary):
用于存儲鍵值對集合。
適用于需要快速通過鍵查找值的情況。

Dictionary<string, int> ages = new Dictionary<string, int>();
ages.Add("Alice", 30);
ages.Add("Bob", 35);

集合 (Set):
用于存儲獨一無二的元素。
適用于需要去重或集合運算的場景。

HashSet<int> set = new HashSet<int>();
set.Add(1);
set.Add(2);

鏈表 (LinkedList):
用于存儲元素以節點形式組織的數據結構。
適用于頻繁的插入和刪除操作,但不適用于隨機訪問。

LinkedList<string> linkedList = new LinkedList<string>();
linkedList.AddLast("A");
linkedList.AddLast("B");

排序列表 (SortedList):
用于存儲已排序的鍵值對集合。
適用于需要快速查找和有序遍歷的場景。

SortedList<int, string> sortedList = new SortedList<int, string>();
sortedList.Add(3, "C");
sortedList.Add(1, "A");

有序字典 (SortedDictionary):
用于存儲已排序的鍵值對集合。
適用于需要有序鍵值對集合的場景。

SortedDictionary<int, string> sortedDictionary = new SortedDictionary<int, string>();
sortedDictionary.Add(3, "C");
sortedDictionary.Add(1, "A");

可觀察集合 (ObservableCollection):
用于實現數據綁定和通知變化的動態集合。
適用于需要與界面交互并實時更新的場景。

ObservableCollection<string> observableCollection = new ObservableCollection<string>();
observableCollection.Add("Item 1");

鍵控集合 (KeyedCollection):
用于存儲具有唯一鍵的元素集合。
適用于需要通過鍵進行查找和檢索的場景。

public class PersonCollection : KeyedCollection<string, Person>
{protected override string GetKeyForItem(Person item) => item.Name;
}

樹形集合 (Tree):
用于存儲具有層級結構的數據。
適用于表示組織結構、文件系統等場景。

// 示例:自定義樹形結構
public class TreeNode<T>
{public T Data { get; set; }public List<TreeNode<T>> Children { get; set; } = new List<TreeNode<T>>();
}

線程安全的集合
在多線程環境中,為了確保線程安全,可以使用以下線程安全的集合:

  1. ConcurrentBag<T>:用于在并行操作中存儲對象的無序集合。
  2. ConcurrentDictionary<TKey, TValue>:用于在多線程環境中存儲鍵/值對的字典。
  3. ConcurrentQueue<T>:用于在多線程環境中實現先進先出(FIFO)的隊列。
  4. ConcurrentStack<T>:用于在多線程環境中實現后進先出(LIFO)的棧。
  5. BlockingCollection<T>:提供了一個線程安全的集合,用于在生產者-消費者模式中使用。

這些線程安全的集合類型能夠在多線程環境中保證數據的一致性和完整性,避免出現競態條件和死鎖等問題。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/712106.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712106.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712106.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

簡歷中自我評價,是否應該刪掉?

你好&#xff0c;我是田哥 年后&#xff0c;不少朋友已經開始著手準備面試了&#xff0c;準備面試的第一個問題就是&#xff1a;簡歷。 寫簡歷是需要一些技巧的&#xff0c;你的簡歷是要給面試官看&#xff0c;得多留點心。 很多簡歷上都會寫自我評價/個人優勢/個人總結等&…

2024有哪些免費的mac蘋果電腦深度清理工具?CleanMyMac X

蘋果電腦用戶們&#xff0c;你們是否經常感到你們的Mac變得不再像剛拆封時那樣迅速、流暢&#xff1f;可能是時候對你的蘋果電腦進行一次深度清理了。在這個時刻&#xff0c;擁有一些高效的深度清理工具就顯得尤為重要。今天&#xff0c;我將介紹幾款優秀的蘋果電腦深度清理工具…

一個Web3項目的收官之作,必然是友好的用戶界面(Web3項目三實戰之四)

正如標題所述,一個對用戶體驗友好的應用,總是會贏得用戶大加贊賞,這是毋庸置疑的。 甭管是web2,亦或是已悄然而至的Web3,能有一個外觀優美、用戶體驗效果佳的的界面,那么,這個應用無疑是個成功的案例。 誠然,Web3項目雖然核心是智能合約攥寫,但用戶界面也是一個DApp不…

【Leetcode每日一刷】哈希表|綱領、242.有效的字母異位詞、349. 兩個數組的交集

綱領 &#x1f517;代碼隨想錄理論部分 關于哈希表這個數據結構就不再重復講了&#xff0c;下面對幾個關鍵點記錄一下&#xff1a; 哈希碰撞 解決方法1&#xff1a;拉鏈法 解決方法2&#xff1a;線性探測法 下面針對做題要用到的三種結構講一下&#xff08;也是重復造輪子了…

vue.config.js publicPath 和 vue-router base 結合配置項目根目錄為二級目錄案例

背景: 同個域名下需要有 PC 管理后臺, H5 端, 企業微信 ......等多個端, 需要在一個域名下通過不同的路徑來區分不同的項目; 例如: abc.com/pc, abc.com/h5, abc.com/wx-work.... 此處做個記錄 步驟: 1. 修改 vue.config.js 中的 publicPath module.exports {outputDir:…

MATLAB|【免費】概率神經網絡的分類預測--基于PNN的變壓器故障診斷

目錄 主要內容 部分代碼 結果一覽 下載鏈接 主要內容 ?《MATLAB神經網絡43個案例分析》共有43章&#xff0c;內容涵蓋常見的神經網絡&#xff08;BP、RBF、SOM、Hopfield、Elman、LVQ、Kohonen、GRNN、NARX等&#xff09;以及相關智能算法&#xff08;SVM、決策…

Java 下載excel文件

一、背景 微信小程序需要導出excel文件&#xff0c;后端技術Java&#xff0c;前端使用uniapp框架&#xff0c;使用excel模板。 二、excel 報表模板 需要補充的內容是以下標記問號的&#xff0c;其中有個表格&#xff0c;內容是動態添加的 三、Java端代碼實現 關鍵步驟&…

Topaz Video AI:一鍵提升視頻品質,智能重塑影像魅力 mac/win版

Topaz Video AI是一款革命性的視頻智能處理軟件&#xff0c;它利用先進的機器學習和人工智能技術&#xff0c;為視頻創作者提供了前所未有的視頻增強和修復功能。無論您是專業視頻編輯師、攝影師&#xff0c;還是熱愛視頻創作的愛好者&#xff0c;Topaz Video AI都能幫助您輕松…

webpack打包效率優化,webpack打包體積優化

優化 webpack 打包效率的方法 使用增量構建和熱更新&#xff1a;在開發環境下&#xff0c;使用增量構建和熱更新功能&#xff0c;只重新構建修改過的模塊&#xff0c;減少整體構建時間。避免無意義的工作&#xff1a;在開發環境中&#xff0c;避免執行無意義的工作&#xff0c…

2403C++,C++20協程庫

原文 基于C20協程的http庫--cinatra cinatra是基于C20無棧協程實現的跨平臺,僅頭,高性能,易用的http/https庫(http1.1),包括httpserver和httpclient,功能完備,不僅支持最普通的getpost等請求,還支持restfulapi,websocket,chunked,ranges,multipart,靜態文件服務和反向代理等功…

Python程序的流程

歸納編程學習的感悟&#xff0c; 記錄奮斗路上的點滴&#xff0c; 希望能幫到一樣刻苦的你&#xff01; 如有不足歡迎指正&#xff01; 共同學習交流&#xff01; &#x1f30e;歡迎各位→點贊 &#x1f44d; 收藏? 留言?&#x1f4dd; 年輕是我們唯一擁有權利去編制夢想的時…

【前端素材】推薦優質后臺管理系統Annex平臺模板(附源碼)

一、需求分析 1、系統定義 后臺管理系統是一種用于管理網站、應用程序或系統的管理界面&#xff0c;通常由管理員和工作人員使用。它提供了訪問和控制網站或應用程序后臺功能的工具和界面&#xff0c;使其能夠管理用戶、內容、數據和其他各種功能。 2、功能需求 后臺管理系…

利用python爬取本站的所有博客鏈接

目錄 前因 首先的嘗試 解決辦法 導入包 定義一個json配置文件 打開瀏覽器執行操作 注意 提取源代碼并且進行篩選鏈接 執行結果 前因 由于自己要把csdn的博客同步到hugo中&#xff0c;把博客轉為md格式已經搞好了&#xff0c;但是由于csdn的圖片具有防盜鏈&#xff0c;…

vue實現商品評分效果(通過插件實現)

Vue.js 實現了一個簡單的商品評分功能。用戶可以通過點擊星星來修改商品的評分&#xff0c;并且評分顯示了相應的星星數。 廢話不多說&#xff0c;直接上代碼 方法一&#xff1a; <template><div><avue-form :model"formData"><avue-form-it…

2024年經典【自動化面試題】附答案

一、請描述一下自動化測試流程&#xff1f; 自動化測試流程一般可以分為以下七步&#xff1a; 編寫自動化測試計劃&#xff1b; 設計自動化測試用例&#xff1b; 編寫自動化測試框架和腳本&#xff1b; 調試并維護腳本&#xff1b; 無人值守測試&#xff1b; 后期腳本維…

【數據結構】深入探討二叉樹的遍歷和分治思想(一)

&#x1f6a9;紙上得來終覺淺&#xff0c; 絕知此事要躬行。 &#x1f31f;主頁&#xff1a;June-Frost &#x1f680;專欄&#xff1a;數據結構 &#x1f525;該文章主要講述二叉樹的遞歸結構及分治算法的思想。 目錄&#xff1a; &#x1f30d;前言&#xff1a;&#x1f30d;…

Sora 原理與技術實戰筆記一

b 站視頻合集 【AIX組隊學習】Sora原理與技術實戰&#xff1a;Sora技術路徑詳解 Sora 技術報告&#xff08;OpenAI&#xff09; huggingsd 文生圖視頻系列的一個開源項目 最強視頻生成模型Sora相關技術解析 https://github.com/lichao-sun/SoraReview 驚艷效果&#xff1a; 長…

【Linux】screen

文章目錄 一、screen二、功能三、使用3.1 安裝3.2 常用參數3.3 狀態3.4 使用3.4.1 終端列表3.4.2 新建screen3.4.3 detached3.4.4 回到終端3.4.5 清除終端 一、screen screen為多視窗管理程序。在服務器上搭建一些服務的時候&#xff0c;經常要用到screen命令。例如某些服務開…

云吶智能運維包含哪些內容?運維未來的發展方向是什么?

智能運維&#xff08;AIOps&#xff09;是一種使用人工智能應用程序來調節IT操作和維護的實踐方式。它結合了大數據和機器學習技術&#xff0c;旨在自動化和改進IT操作和維護任務&#xff0c;如故障檢測、因果分析和自動故障修復。以下是智能操作和維護的具體內容、挑戰和解決方…

使用Node.js構建一個簡單的聊天機器人

當談到人工智能&#xff0c;我們往往會想到什么&#xff1f;是智能語音助手、自動回復機器人等。在前端開發領域中&#xff0c;我們也可以利用Node.js來構建一個簡單而有趣的聊天機器人。本文將帶你一步步實現一個基于Node.js的聊天機器人&#xff0c;并了解其工作原理。 首先…