.net-----集合和数据结构

前言

集合和数据结构的基本概念

列表类集合

字典类集合

队列集合类型

堆栈集合类型

散列集合

位集合

集合和数据结构的基本概念

命名空间

  • System.Collections
    对象:列表/链表、位数组、哈希表、队列和堆栈

  • System.Collections.Generic
    定义泛型集合的接口和类

  • System.Collections.Specialized
    包含专用的集合

列表类集合

  • 列表类集合类型基于IList接口,集合中的每个元素都只包含一个值

  • 列表类集合类型包括:

Array
ArrayList集合类型
List集合类型

列表类集合:数组列表

ArrayList或List
用于构建复杂的数组或列表集合,始终一维
容量可根据需要自动扩充
提供添加、插入或移除某一范围元素的方法

添加、删除、查找、数据排序、拷贝和转换、元素数容量和实际数

ArrayList al = new ArrayList();

al. Add(1);
al. Insert(1,”A”);
al. Remove(3);
al. RemoveAt(2);
……

列表类集合:列表List

List
对应于 ArrayList 的泛型类
表示可通过索引访问的对象的强类型列表
该类使用大小可按需动态增加的数组实现 IList泛型接口
提供用于对列表进行搜索、排序和操作的方法

List<string> weekdays = new List<string>();
weekdays. Add("Monday"); 
……
weekdays. Insert(1, "Tuesday");

双向链表LinkedList

  • 通用链表,提供LinkedListNode类型的单独节点
  • LinkedListNode属性Previous 和Next用于访问其前后节点
  • LinkedListNode属性Value用于获取节点的值
  • 属性List用于获取节点所属的LinkedList
  • LinkedList属性First和Last表示第一个和最后一个节点
LinkedList<int> list = new LinkedList<int>(); //创建双向链表
list.AddFirst(0); list.AddLast(8);
LinkedListNode<int> lln1 = new LinkedListNode<int>(1); //创建节点
LinkedListNode<int> lln2 = new LinkedListNode<int>(2); //创建节点
list.AddFirst(lln1); list.AddLast(lln2);
list.AddBefore(list.Last, 33); list.AddAfter(list.Last, 25);
LinkedListNode<int> mark1 = list.Find(8); //查找节点
list.AddBefore(mark1, 11);
LinkedListNode<int> node = list.First; //输出列表内容

字典类集合

字典类集合类型

基于IDictionary/IDictionary<TKey, TValue > 接口
集合中的每个元素都包含键/值对

Hashtable集合类型
Dictionary 集合类型
SortedList集合类型
SortedList<TKey, TValue>集合类型
SortedDictionary<TKey, TValue> 集合类型

哈希表Hashtable

键/值(key/value)对的集合,根据键的哈希代码进行组织
key和value键值均为object类型

每个键(key)必须是唯一的
添加后键(key)就不能更改
键(key)不能为 null 引用,但值(value)可以

在这里插入图片描述

字典类集合:Dictionary<TKey, TValue >

  • TKey表示字典中的键的类型
  • TValue表示字典中的值的类型
  • 集合中的每个元素都是一个KeyValuePair<TKey, TValue>结构,由一个值及其相关联的键组成
  • 提供了从一组键到一组值的映射

在这里插入图片描述

排序列表

  • 键/值(key/value)对的集合,按键排序,可按键和索引访问

  • 集合中的每个元素都是一个可作为DictionaryEntry对象进行访问的键/值对

  • 添加和移除元素时,元素会按正确的排序顺序插入或移除,同时索引也进行相应的调整

SortedList<TKey, TValue>

  • 泛型类,表示键/值(key/value)对的集合

  • 以基于键的排序顺序维护元素,并可按照键和索引访问

  • 提供了从一组键到一组值的映射

  • 每个元素都是一个KeyValuePair<TKey, TValue>结构

元素对象查找的方法Contains、ContainsKey、ContainsValue、IndexOfKey和IndexOfValue
对象设置和获取的方法GetByIndex、GetKey、GetKeyList、GetValueList和SetByIndex

排序字典SortedDictionary<TKey, TValue>

SortedList<TKey, TValue>使用的内存较少
SortedDictionary<TKey, TValue>可对未排序的数据执行更快的插入和移除

SortedList list = new SortedList(); //创建List实例对象
list.Add(5, "Friday"); 
list.Remove(7);  //使用Remove方法删除索引7位置的元素
list.RemoveAt(5); ……

 SortedList<string, string> list = new SortedList<string, string>();
list.Add("txt", "notepad.exe"); ……

SortedDictionary<string, string> list = new SortedDictionary<string, string>();
list.Add("txt", "notepad.exe"); ……
  • 添加元素的方法——Add;
  • 删除元素的方法——Remove, Clear
  • 元素对象查找方法——Contains,ContainKey,ContainValue
  • Count属性——表中键/值对数目
  • Keys属性——键的集合
  • Values属性——值的集合

队列集合类型

  • Queue类和Queue泛型类表示对象的先进先出集合

  • 存储在Queue中的对象在一端(Queue 的结尾处)插入,从另一端(Queue的开始处)移除

在这里插入图片描述

堆栈集合类型

Stack类和Stack泛型类表示对象的简单的后进先出非泛型集合
Stack采用循环缓冲区方式实现对象的增删

在这里插入图片描述

散列集合

  • HashSet泛型类
  • set 集合,实现 ICollection 接口和 ICollection泛型接口
  • 集是一组不重复出现且无特定顺序的元素、

用于集合运算的方法:

UnionWith(并集)
IntersectWith(交集)
ExceptWith(差集)
SymmetricExceptWith(对称差集)

用于测试集合的方法:

IsProperSubsetOf、IsProperSupersetOf、IsSubsetOf、IsSupersetOf、Overlaps和SetEquals

位集合

元素为位标志的集合,其元素都是一位,而不是一个对象

BitArray 类

  • 管理位值的压缩数组,其容量可通过Length属性来控制
  • 使用一个整数索引(始于0)访问此集合中的元素
  • 设置/获取指定索引位置的值方法Set和SetAll/Get
  • 筛选运算的方法:And,Or,Xor和Not

BitVector32类

  • 值类型,在堆栈上分配;而BitArray 是引用类型,在堆上分配
  • 性能更高

专用集合

NameValueCollection、StringDictionary和 StringCollection 等特殊用途的集合

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醉卧考场君莫笑

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值