C# 数据结构集合类总结

1、简单的命名空间:

(1)Array、Enum String 、Obj等:引入命名空间:using System;
(2)ArrayList、HashTable等: 引入命名空间: using System.Collections
(3)List<T>、 Queue <T>: 引入命名空间:using System.Collections.Generic;

2、最长用的集合类进行简单的总结:{

非范型的基本已经不用了
ArraryList 后来被List<T>替代。
HashTable 后来被Dictionary<TKey,TValue>替代。 
Queue 后来被Queue<T>替代。 
SortedList 后来被SortedList<T>替代。 
Stack 后来被Stack<T>替代。
}
集合
说明
List<T>、LinkedList<T>、SortedList<T>
可以像数组一样按索引访问列表,但提供了其他方法来搜索和排序;
双向有序列表,为任何一端的插入和删除进行了优化,这种集合既可作为队列,也可作为栈,还支持列表那样的随机访问;
键/值对的有序列表,键必须实现Icomparable<T>接口;
Queue<T>
先入先出数据结构,提供了方法将数据项添加到队列的一段,从另一端删除项,以及只检查不删除
Stack<T>
先入后出数据结构,提供了方法将数据压入栈顶,从栈顶出栈,以及只检查栈顶的项而不删除
HashSet<T>、SortedSet<T>
无序值列表,为快速数据获取而优化,提供了面向集合的方法来判断它容纳的项是不是另一个 HashSet<T>  对象中的项的子集,以及计算不同 HashSet<T>  对象的交集和并集;
有序Set,键必须实现Icomparable<T>接口
Dictionary<TKey,TValue>、 SortedDictionary<TKey, TValue>
字典集合根据键而不是索引来获取值

在SortedList中,键和值分别保存在一个数组中,当向Sorted添加一个元素时,SortedList类添加一个元素时,SortedList会首先对key进行排序,然后根据排序结果计算出要插入到集合中的位置索引,再分别将key和value插入到各自数组的指定索引位置。

 Queue、Stack的一些重要特性。
  1、Queue先进先出、Stack后进先出
  2、可以添加null值到集合中
  3、允许集合中的元素重复
  4、Queue、Stack容量会按需自动添加

下面是各种常见集合类的定义:
[SerializableAttribute]
[ComVisibleAttribute(true)]
public abstract class Array : ICloneable, IList, ICollection, 
	IEnumerable, IStructuralComparable, IStructuralEquatable

[SerializableAttribute]
public class List<T> : IList<T>, ICollection<T>, IEnumerable<T>, 
	IEnumerable, IList, ICollection, IReadOnlyList<T>, IReadOnlyCollection<T>


[SerializableAttribute]
[ComVisibleAttribute(false)]
public class Queue<T> : IEnumerable<T>, IEnumerable, ICollection, 
	IReadOnlyCollection<T>


[SerializableAttribute]
[ComVisibleAttribute(false)]
public class Stack<T> : IEnumerable<T>, IEnumerable, ICollection, 
	IReadOnlyCollection<T>

[SerializableAttribute]
[ComVisibleAttribute(false)]
public class LinkedList<T> : ICollection<T>, IEnumerable<T>, 
	IEnumerable, ICollection, IReadOnlyCollection<T>, ISerializable, 
	IDeserializationCallback

[SerializableAttribute]
[HostProtectionAttribute(SecurityAction.LinkDemand, MayLeakOnAbort = true)]
public class HashSet<T> : ICollection<T>, IEnumerable<T>, IEnumerable, 
	ISerializable, IDeserializationCallback, ISet<T>, IReadOnlyCollection<T>

[SerializableAttribute]
[ComVisibleAttribute(false)]
public class Dictionary<TKey, TValue> : IDictionary<TKey, TValue>, 
	ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, 
	IEnumerable, IDictionary, ICollection, IReadOnlyDictionary<TKey, TValue>, 
	IReadOnlyCollection<KeyValuePair<TKey, TValue>>, ISerializable, 
	IDeserializationCallback

[SerializableAttribute]
[ComVisibleAttribute(false)]
public class SortedList<TKey, TValue> : IDictionary<TKey, TValue>, 
	ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, 
	IEnumerable, IDictionary, ICollection, IReadOnlyDictionary<TKey, TValue>, 
	IReadOnlyCollection<KeyValuePair<TKey, TValue>>

3、非泛型和泛型集合的接口

IDictionary、IList接口--继承-> ICollection --继承-> IEnumerable接口(GetEnumerator方法)

IDictionary接口是键/值对接口,它的实现如HashTable类 而IList是值的集合,其成员可通过索引访问,如ArrayList类
非泛型集合接口
泛型集合接口
说明
ICollection 
ICollection<T>
定义所有集合的大小(Count),枚举器(foreach)和同步(copyto)方法,继承自 IEnumerable
IList
IList<T>
表示可按照索引单独访问的一组对象(像数组一样)
IDictionary
IDictionary<T>
表示键/值对的集合
IComparer
IComparer<T>
定义类型为比较两个对象而实现的方法
IEqualityComparer
IEqualityComparer<T>
定义方法以支持对象的相等比较
IEnumerable
IEnumerable<T>
公开枚举器。实现了该接口意味着允许foreach语句循环访问集合中的元素
IEnumerator
IEnumerator<T>
支持在泛型集合上进行简单迭代
IEnumerable接口非常简单,只包含一个抽象的方法GetEnumerator(),它返回一个可用于循环访问集合的IEnumerator对象(Current属性,MoveNext和Reset两个方法)

猜你喜欢

转载自blog.csdn.net/yuewei19/article/details/79744321