学习记录:集合、字典、堆栈

今天是学习C#第16天。。。
所学集合、字典、堆栈。


数组的局限性:
1.数组只能存储相同类型的数据
2.数组不能动态的扩展长度


集合:

集合原本是数学上的一个概念,表示一组具有某种性质的数学元素,引用到程序设计中表示一组具有相同性质的对象。

  • 泛型集合类一般位于System.Collections.Generic命名空间,
  • 非泛型集合类位于System.Collections命名空间。
  • 此外,System.Collections.Specialized命名空间中也包含一些有用的集合类。

集合的类型:
集合可范围两类:泛型集合与非泛型集合


非泛型集合:

动态数组(ArrayList)
堆栈(Stack)
队列(Queue)
哈希表(HashTable)

泛型集合:

动态数组(ArrayList<>)
堆栈(Stack<>)
队列(Queue<>)
字典(Dictionary<Tkey,Tvalue>)※※※

ArrayList

动态数组

  • 动态的增加和减少元素

  • 实现了ICollection和IList和IEnumerable接口

  • 灵活的设置数组的大小

  • 不安全的集合类型

  • 其元素为值类型时,效率不高(装箱和拆箱耗性能)

    ArrayList numbers = new ArrayList();
    

ArrayList常用方法与描述:

描述和用法
Add() 将对象添加到ArrayList的结尾处
Insert() 将元素插入ArrayList的指定索引处
Remove() 从ArrayList中移除特定对象的第一个匹配项
RemoveAt() 移除ArrayList的指定索引处的元素
Reverse() 将整个ArrayList当中元素的顺序反转
Contains() 确定某元素是否在ArrayList中
Clear() 从ArrayList中移除所有元素

List<T>

泛型动态数组

  • List类是ArrayList类的泛型等效类

  • 同样实现了IList接口,IEnumrator接口和ICollection

  • 与ArrayList不同的是,声明集合时需要声明集合内部的数据类型,即T的类型.

  • 安全的集合类型

  • 某种情况时,在处理值类型时其处理速度比ArrayList快的多

    List<int> number=new List<int>();
    List<string> str=new List<string>();
    

List<T>常用方法与描述:

描述和用法
Add() 将对象添加到List<T>的结尾处
Insert() 将元素插入List<T>的指定索引处
Remove() 从List<T>中移除特定对象的第一个匹配项
RemoveAt() 移除List<T>的指定索引处的元素
Reverse() 将整个List<T>当中元素的顺序反转
Contains() 确定某元素是否在List<T>中
Clear() 从List<T>中移除所有元素
IndexOf(T) 搜索指定对象,并返回整个List<T>中第一个匹配项的从0开始的索引

Stack(Stack<>)

堆栈

  • 后进先出(LIFO)的一种数据结构,本质上堆栈也是一种线性结构
  • 线性结构的基本特点:即每个节点有且只有一个前驱结点和一个后续节点
  • 随着像Stack中添加元素,容量通过重新分配按需自动增加
  • 可以接受null作为有效值
  • 允许重复的元素
  • 不安全的数据结构
  • 其泛型为Stack<T>

Stack常用方法与描述

描述和用法
Push() 将对象插入Stack的顶部.(入栈操作)
Pop() 移除并返回Stack顶部的对象.(出栈操作)
Peek() 返回位于stack顶部的对象,但不移除.
Contains() 确定某元素是否在栈中
Clear() 从statck中移除所有对象
Count 获取栈中包含的元素

Queue(Queue<>)

队列

  • 先进先出(FIFO)的一种数据结构
  • 随着像Queue中添加元素,容量通过重新分配按需自动增加,可以通过TrimToSize来减少容量
  • 可以接受null作为有效值
  • 允许重复的元素
  • 不安全的数据结构
  • 其泛型为Queue<T>
  • 在A*算法中会用优先级队列处理路径节点

Queue常用方法与描述:

描述和用法
Enqueue() 将对象添加到Queue的结尾处,入队.
Dequeue() 移除并返回位于Queue开始处的对象
Peek() 返回位于Queue开始处的对象但不将其移除
Contains() 确定某元素是否在Queue中
Clear() 从Queue中移除所有对象
Count 获取Queue中包含的元素数

Dictionary<K,V>

字典

  • 处理和表现类似key-value的键值对的集合
  • Key和Value的类型由泛型指定
  • key值必须唯一,区分大小写
  • Value可以是值类型变量,也可以是对象

Dictionary<K,V>常用方法与描述:

描述和用法
Add(TKey, TValue) 将指定的键和值添加到字典中。
Clear() 将所有键和值从 Dictionary<TKey,TValue> 中移除。
ContainsKey(TKey) 确定是否 Dictionary<TKey,TValue> 包含指定键。
ContainsValue(TValue) 确定 Dictionary<TKey,TValue> 是否包含特定值。
Remove(TKey) 将带有指定键的值从 Dictionary<TKey,TValue> 中移除。
TryGetValue(TKey, TValue) 获取与指定的键关联的值。
Keys 获得一个包含 Dictionary<TKey,TValue> 中的键的集合。
Values 获得一个包含 Dictionary<TKey,TValue> 中的值的集合。

HashTable

哈希表

  • 处理和表现类似key-value的键值对的集合
  • Key和Value都是object类型
  • key值必须唯一,区分大小写
  • Value可以是值类型变量,也可以是对象

HashTable常用方法与描述:

描述和用法
Add() 将指定的键和值添加到哈希表中
Clear() 从 Hashtable 中移除所有的元素。
ContainsKey() 判断 Hashtable 是否包含指定的键。
ContainsValue() 判断 Hashtable 是否包含指定的值。
Remove() 从 Hashtable 中移除带有指定的键的元素。
Keys 获取一个ICollection,包含 Hashtable 中的键。
Values 获取一个ICollection,包含Hashtable中的值
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容