c#中常用集合类和集合接口之接口系列【转】

常用集合接口系列:http://www.cnblogs.com/fengxiaojiu/p/7997704.html

常用集合类系列:http://www.cnblogs.com/fengxiaojiu/p/7997541.html

大多数集合都在System.Collections,System.Collections.Generic两个命名空间。其中System.Collections.Generic专门用于泛型集合。

针对特定类型的集合类型位于System.Collections.Specialized;命名空间;

线程安全的集合类位于System.Collections.Concurrent;命名空间。

下面是集合和列表实现的接口如下:

一:列表

1 [Serializable]  
2 [DebuggerTypeProxy(typeof(Mscorlib_CollectionDebugView<>))]  
3 [DebuggerDisplay("Count = {Count}")]  
4 public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, IList, ICollection, IEnumerable  

从这个可以看出,泛型集合List<T>实现了这么多接口,具体接口的信息可以通过工具查看。

复制代码

using System;
using System.Collections.Generic;namespace ConsoleApplication1
{public class Program{static void Main(string[] args){List<String> list = new List<string>();list.Add("张三");list.Add("李四");list.Add("王五");list.Add("田六");list.Add("赵七");for (int i = 0; i < list.Count; i++){Console.WriteLine("for循环:" + i.ToString() + "=" + list[i]);}list.RemoveAt(0);foreach (String item in list){Console.WriteLine("foreach迭代:" + item);}list.AddRange(new String[] { "Hello1", "Hello2", "Hello3" });list.ForEach(Print);Console.Read();}private static void Print(String item){Console.WriteLine("ForEach:" + item);}}}

复制代码

二、队列

队列先进先出,一头进一头出,用Queue<T>实现

    [Serializable][DebuggerTypeProxy(typeof(System_QueueDebugView<>))][ComVisible(false)][DebuggerDisplay("Count = {Count}")]public class Queue<T> : IEnumerable<T>, ICollection, IEnumerable

可以看出队列实现了集合的接口,迭代的接口

复制代码

using System;
using System.Collections.Generic;namespace ConsoleApplication1
{public class Program{static void Main(string[] args){Queue<String> queue = new Queue<string>();//进队queue.Enqueue("张三");queue.Enqueue("李四");queue.Enqueue("王五");queue.Enqueue("田六");queue.Enqueue("赵七");foreach (String item in queue){Console.WriteLine("foreach迭代:" + item);}//出队while (queue.Count > 0){Console.WriteLine("出队:" + queue.Dequeue());}Console.Read();}}
}

复制代码

三、栈

栈:从同一边先进后出,用Stack<T>实现

 [DebuggerDisplay("Count = {Count}")][DebuggerTypeProxy(typeof(System_StackDebugView<>))][ComVisible(false)]public class Stack<T> : IEnumerable<T>, ICollection, IEnumerable

栈也是实现了集合接口与迭代接口的

复制代码

using System;
using System.Collections.Generic;namespace ConsoleApplication1
{public class Program{static void Main(string[] args){Stack<String> stack = new Stack<string>();//进栈stack.Push("张三");stack.Push("李四");stack.Push("王五");stack.Push("田六");stack.Push("赵七");foreach (String item in stack){Console.WriteLine("foreach迭代:" + item);}//出栈while (stack.Count > 0){Console.WriteLine("出栈:" + stack.Pop());}Console.Read();}}
}

复制代码

 四、链表

LinkedList是一个双向链表,链表有个有点,就是在链表中间插入、删除元素很快,但是查找中间与末尾的元素很慢,需要一个节点一个节点的去找。

复制代码

    [Serializable][DebuggerTypeProxy(typeof(System_CollectionDebugView<>))][DebuggerDisplay("Count = {Count}")][ComVisible(false)]public class LinkedList<T> : ICollection<T>, IEnumerable<T>, ICollection, IEnumerable, ISerializable, IDeserializationCallback

复制代码

由此可见链表也是有集合的特性的,可以迭代,同时还有链表的特性

复制代码

using System;
using System.Collections.Generic;namespace ConsoleApplication1
{public class Program{static void Main(string[] args){LinkedList<String> lList = new LinkedList<string>();LinkedListNode<String> node = new LinkedListNode<string>("root");lList.AddFirst(node);node = lList.AddAfter(node, "张三");node = lList.AddAfter(node, "李四");node = lList.AddAfter(node, "王五");node = lList.AddAfter(node, "田六");node = lList.AddAfter(node, "赵七");foreach (String item in lList){Console.WriteLine("foreach迭代:" + item);}node = lList.First;Console.WriteLine("第一个元素:" + node.Value);node = lList.Last;Console.WriteLine("最后一个元素:" + node.Value);Console.Read();}}
}

复制代码

 五、有序列表

SortedList采用键-值对存储,键不能重复,并且会根据key进行排序

复制代码

    [Serializable][DebuggerTypeProxy(typeof(System_DictionaryDebugView<,>))][DebuggerDisplay("Count = {Count}")][ComVisible(false)]public class SortedList<TKey, TValue> : IDictionary<TKey, TValue>, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IDictionary, ICollection, IEnumerable

复制代码

可以看出SortedList不仅具有字典的特性,还有集合,迭代的功能

复制代码

using System;
using System.Collections.Generic;namespace ConsoleApplication1
{public class Program{static void Main(string[] args){//Key必须唯一,如果不唯一可以考虑Lookup<TKey,TElement>SortedList<int, String> sList = new SortedList<int, string>();sList.Add(100, "张三");sList.Add(21, "李四");sList.Add(13, "王五");sList.Add(44, "田六");sList.Add(35, "赵七");foreach (KeyValuePair<int, String> item in sList){Console.WriteLine("key=" + item.Key.ToString() + ";value=" + item.Value);}Console.Read();}}
}

复制代码

 六、字典

字典是很复杂的数据结构,允许通过key来查找值,字典可以自由添加、删除元素,没有集合由于移动元素导致的开销。

复制代码

[Serializable][DebuggerTypeProxy(typeof(Mscorlib_DictionaryDebugView<,>))][DebuggerDisplay("Count = {Count}")][ComVisible(false)]public class Dictionary<TKey, TValue> : IDictionary<TKey, TValue>, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IDictionary, ICollection, IEnumerable, ISerializable, IDeserializationCallback

复制代码

可以看出字典也具有集合的特性,可以迭代

复制代码

using System;
using System.Collections.Generic;namespace ConsoleApplication1
{public class Program{static void Main(string[] args){//Key必须唯一Dictionary<int, String> dict = new Dictionary<int, string>();dict.Add(11, "张三");dict.Add(1, "李四");dict.Add(2, "王五");dict.Add(16, "田六");dict.Add(12, "赵七");foreach (KeyValuePair<int, String> item in dict){Console.WriteLine("key=" + item.Key.ToString() + ";value=" + item.Value);}Console.Read();}}
}

复制代码

 说到字典,顺便谈一下有序字典,与有序列表对应;SortedDictionary,SortedList,SortedSet

会根据Key进行排序

复制代码

using System;
using System.Collections.Generic;namespace ConsoleApplication1
{public class Program{static void Main(string[] args){//Key必须唯一SortedDictionary<int, String> dict = new SortedDictionary<int, string>();dict.Add(11, "张三");dict.Add(1, "李四");dict.Add(2, "王五");dict.Add(16, "田六");dict.Add(12, "赵七");foreach (KeyValuePair<int, String> item in dict){Console.WriteLine("key=" + item.Key.ToString() + ";value=" + item.Value);}Console.Read();}}
}

复制代码

七、集

集(Set):包含不重复元素,常用HashSet,SortedSet

 [Serializable][DebuggerDisplay("Count = {Count}")][DebuggerTypeProxy(typeof(HashSetDebugView<>))]public class HashSet<T> : ISerializable, IDeserializationCallback, ISet<T>, ICollection<T>, IEnumerable<T>, IEnumerable
 [Serializable][DebuggerTypeProxy(typeof(SortedSetDebugView<>))][DebuggerDisplay("Count = {Count}")]public class SortedSet<T> : ISet<T>, ICollection<T>, IEnumerable<T>, ICollection, IEnumerable, ISerializable, IDeserializationCallback

 

复制代码

using System;
using System.Collections.Generic;namespace ConsoleApplication1
{public class Program{static void Main(string[] args){HashSet<String> hSet = new HashSet<string>();hSet.Add("张三");hSet.Add("李四");hSet.Add("王五");hSet.Add("田六");hSet.Add("赵七");foreach (String item in hSet){Console.WriteLine("foreach迭代:" + item);}Console.Read();}}
}

复制代码

 

 

复制代码

using System;
using System.Collections.Generic;namespace ConsoleApplication1
{public class Program{static void Main(string[] args){SortedSet<String> hSet = new SortedSet<string>();hSet.Add("张三");hSet.Add("李四");hSet.Add("王五");hSet.Add("田六");hSet.Add("赵七");foreach (String item in hSet){Console.WriteLine("foreach迭代:" + item);}Console.Read();}}
}

复制代码

性能比较:

 ps:原文链接:http://blog.csdn.net/ceclar123/article/details/8655853

                            

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/438114.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PWN-PRACTICE-BUUCTF-4

PWN-PRACTICE-BUUCTF-4ciscn_2019_en_2bjdctf_2020_babystacknot_the_same_3dsctf_2016[HarekazeCTF2019]baby_ropciscn_2019_en_2 这题和ciscn_2019_c_1一模一样 栈溢出ret2libc&#xff0c;encrypt函数里的异或运算不用管 from pwn import * context.log_level"debug&…

PWN-PRACTICE-BUUCTF-5

PWN-PRACTICE-BUUCTF-5jarvisoj_level2_x64ciscn_2019_n_5others_shellcodeciscn_2019_ne_5jarvisoj_level2_x64 这题和[HarekazeCTF2019]baby_rop几乎一模一样 from pwn import * #context.log_level"debug" ioremote(node4.buuoj.cn,27023) elfELF(./level2_x64)…

Scrum敏捷开发沉思录

计算机科学的诞生&#xff0c;是世人为了用数字手段解决实际生活中的问题。随着时代的发展&#xff0c;技术的进步&#xff0c;人们对于现实世界中的问题理解越来越深刻&#xff0c;描述也越来越抽象&#xff0c;于是对计算机软件的需求也越来越高&#xff0c;越来越复杂&#…

PWN-PRACTICE-BUUCTF-6

PWN-PRACTICE-BUUCTF-6铁人三项(第五赛区)_2018_ropbjdctf_2020_babyropbabyheap_0ctf_2017pwn2_sctf_2016铁人三项(第五赛区)_2018_rop vulnerable_function函数中read构成栈溢出&#xff0c;ret2libc from pwn import * context.log_level"debug" ioremote(node4…

PWN-PRACTICE-BUUCTF-7

PWN-PRACTICE-BUUCTF-7jarvisoj_fmciscn_2019_s_3SROP解法ret2csu解法bjdctf_2020_babystack2[HarekazeCTF2019]baby_rop2jarvisoj_fm 格式化字符串漏洞&#xff0c;可以测出我们的输入在栈上的偏移为11 自己构造或者使用fmtstr_payload构造payload均可&#xff0c;目标是让x4…

Axure教程 axure新手入门基础(3) 简单易上手

(三)Axure rp元件的触发事件 l OnClick(点击时): 鼠标点击事件&#xff0c;除了动态面板的所有的其他元件的点击时触发。比如点击按钮。 l OnMouseEnter(鼠标移入时): 鼠标进入到某个元件范围时触发&#xff0c;比如当鼠标移到某张图片时显示该图片的介绍。 l OnMouseOut(鼠标移…

使用Nuget 安装指定版本package或者更新package到指定版本

最近在琢磨MVC和EntityFramework,使用的VS是2013版的&#xff0c;在Nuget的GUI界面下安装了EntityFramework(默认安装最新版的&#xff0c;怎么安装指定版本还没找到),按照MVC的示例项目MusicStore逐步做的过程中发现MVC4不支持EntityFramwok 6。 尝试去更新MVC版本各种失败&a…

CSS一个元素同时使用多个类选择器(class selector)

CSS类选择器参考手册 一个元素同时使用多个类选择器 CSS中类选择器用点号表示。实际项目中一个div元素为了能被多个样式表匹配到&#xff08;样式复用&#xff09;&#xff0c;通常div的class中由好几段组成&#xff0c;如<div class"user login">能被.user和…

css 块元素、内联元素、内联块元素

元素就是标签&#xff0c;布局中常用的有三种标签&#xff0c;块元素、内联元素、内联块元素&#xff0c;了解这三种元素的特性&#xff0c;才能熟练的进行页面布局。 块元素&#xff1a; 块元素&#xff0c;也可以称为行元素&#xff0c;布局中常用的标签&#xff0c;如&…

Redis与关系型数据库的同步问题

Redis是一个高性能的key-value数据库。 redis的出现&#xff0c;很大程度补偿了memcached这类key-value存储的不足&#xff0c;在部分场合可以对关系数据库起到很好的补充作用。它提供了Python&#xff0c;Ruby&#xff0c;Erlang&#xff0c;PHP客户端&#xff0c;使用很方便。…

.NET 实现并行的几种方式(一)

好久没有更新了&#xff0c;今天来一篇&#xff0c;算是《同步与异步》系列的开篇吧&#xff0c;加油&#xff0c;坚持下去&#xff08;PS:越来越懒了&#xff09;。 一、Thread 利用Thread 可以直接创建和控制线程&#xff0c;在我的认知里它是最古老的技术了。因为out了、所…

REVERSE-PRACTICE-BUUCTF-32

REVERSE-PRACTICE-BUUCTF-32[第四章 CTF之APK章]数字壳的传说[第五章 CTF之RE章]Hello, RE[第五章 CTF之RE章]BabyAlgorithm[第五章 CTF之RE章]BabyConst[第五章 CTF之RE章]BabyLib[第五章 CTF之RE章]easy_rust[第五章 CTF之RE章]easy_go[第五章 CTF之RE章]easy_mfc[第四章 CTF…

.NET 实现并行的几种方式(二)

本随笔续接&#xff1a;.NET 实现并行的几种方式&#xff08;一&#xff09; 四、Task 3&#xff09;Task.NET 4.5 中的简易方式 在上篇随笔中&#xff0c;两个Demo使用的是 .NET 4.0 中的方式&#xff0c;代码写起来略显麻烦&#xff0c;这不 .NET 4.5提供了更加简洁的方…

redis 和 数据库mysql之间的关系

https://www.zhihu.com/question/20734566 https://www.zhihu.com/question/19660689 http://blog.csdn.net/Ideality_hunter/article/details/77621643 redis和mysql要根据具体业务场景去选型 mysql&#xff1a;数据放在磁盘redis&#xff1a;数据放在内存 redis适合放一些…

GPS/轨迹追踪、轨迹回放、围栏控制

折腾一个多月终于弄完了这个项目&#xff0c;起初都未曾接触GPS/轨迹追踪、轨迹回放、圈划围栏...等一些在百度地图或者Googel地图操作的一些业务&#xff0c;后端的业务相对来说简单点 cas单点登录&#xff0c;mongdb灵活的数据存储方式,ActiveMQ消息推送、Redis存储... 这篇…

C#.NET Thread多线程并发编程学习与常见面试题解析-1、Thread使用与控制基础

前言&#xff1a;因为平时挺少用到多线程的&#xff0c;写游戏时都在用协程&#xff0c;至于协程那是另一个话题了&#xff0c;除了第一次学习多线程时和以前某个小项目有过就挺少有接触了&#xff0c;最近准备面试又怕被问的深入&#xff0c;所以就赶紧补补多线程基础。网上已…

PWN-PRACTICE-BUUCTF-22

PWN-PRACTICE-BUUCTF-22hitcontraining_unlinkpicoctf_2018_leak_mesuctf_2018_basic pwnaxb_2019_brop64hitcontraining_unlink unlink&#xff0c;参考&#xff1a;[BUUCTF]PWN——hitcontraining_unlink # -*- coding:utf-8 -*- from pwn import * #ioprocess("./bam…

javaee, javaweb和javase的区别以及各自的知识体系

JavaSE Java SE 以前称为 J2SE。它允许开发和部署在桌面、服务器、嵌入式环境和实时环境中使用的 Java 应用程序。Java SE 包含了支持 Java Web 服务开发的类&#xff0c;并为 Java Platform&#xff0c;Enterprise Edition&#xff08;Java EE&#xff09;提供基础。 JavaE…

.NET 实现并行的几种方式(三)

在前两篇随笔中&#xff0c;先后介绍了 Thread 、ThreadPool 、IAsyncResult (即 APM系列) 、Task 、TPL (Task Parallel Library)。 写到这些笔者突然意识到 还有一个EMP系列没有写&#xff0c;在这里补充一下&#xff1a; 六、 EAP 、EAP中的典型代表是 WebClient: EAP系…

.NET异步编程之新利器——Task与Await、Async

一. FrameWork 4.0之前的线程世界     在.NET FrameWork 4.0之前&#xff0c;如果我们使用线程。一般有以下几种方式&#xff1a; 使用System.Threading.Thread 类&#xff0c;调用实例方法Start()开启一个新线程&#xff0c;调用Abort()方法来提前终止线程。使用System.T…