C# 集合

C# 集合

  • 集合
    • 集合接口和类型
    • 列表
    • 队列
    • 链表
    • 有序表
    • 字典
    • Loopup
    • HashSet
    • 位数组

集合

数组的大小是固定的。如果元素个数是动态的,就应使用集合类。List 和 ArrayList 是与数组相当的集合类。还有其他类型的集合:队列、栈、链表和字典。

集合接口和类型

集合类可以组合为集合,存储 Object 类型的元素和泛型集合类。
对象类型的集合位于 System.Collections 命名空间;泛型集合类位于 System.Collections. Generic
命名空间;专用于特定类型的集合类位于 System.Collections.Specialized 命名空间。
C# 集合_第1张图片
C# 集合_第2张图片
C# 集合_第3张图片

列表

.NET Framework 为动态列表提供了类 ArrayList 和 List。。System.Collections.Generic 命名空间中的类 List的用法非常类似于 System.Collections 命名空间中的 ArrayList 类。
ArrayList objectList = new ArrayList();
List intList = new List();
List racers = new List();
intList.Add(1);
intList.Add(2);

队列

队列是其元素以先进先出(FIFO)的方式来处理的集合。在.NET 的 System.Collections 命名空间中有非泛型类 Queue,在 System.Collections.Generic 命名空间中有泛型类 Queue。这两个类的功能非常类似,但泛型类是强类型化的,定义了类型 T,而非泛型类基于 Object 类型。
C# 集合_第4张图片

栈是与队列非常类似的另一个容器,只是要使用不同的方法访问栈。最后添加到栈中的元素会最先读取。栈是一个后进先出(LIFO)容器。与 Queue 类相同,非泛型类 Statck 也执行了 ICollection、IEnumerable 和 ICloneable 接口;泛型类Statck实现了 IEnumerable、ICollection 和 IEnumerable 接口。用 Push()方法在栈中添加元素,用 Pop()方法获取最近添加的元素。
C# 集合_第5张图片
Stack alphabet = new Stack();
alphabet.Push(‘A’);
alphabet.Push(‘B’);

链表

LinkedList 集合类没有非泛型集合的类似版本。LinkedList 是一个双向链表,其元素指向它前面和后面的元素。

C# 集合_第6张图片

有序表

如果需要排好序的表,可以使用 SortedList。这个类按照键给元素排序。
C# 集合_第7张图片
C# 集合_第8张图片

字典

字典表示一种非常复杂的数据结构,这种数据结构允许按照某个键来访问元素。字典也称为映射或散列表。字典的主要特性是能根据键快速查找值。也可以自由添加和删除元素,这有点像List,但没有在内存中移动后续元素的性能开销。
创建一个新的 Dictionary实例;
可以使用 Dictionary类的索引器替代 TryGetValue()方法,来访问存储在字典中
的值;

Loopup

Dictionary只为每个键支持一个值。新类 Lookup是.NET 3.5 中新增的,它类似于 Dictionary,但把键映射到一个值集上。这个类在程序集System.Core中实现,用 System.Linq 命名空间定义。
C# 集合_第9张图片

HashSet

System.Collections.Generic 命名空间中包含一个新的集合类:HashSet。这个集合类包含不重复项的无序列表。这种集合称为"集(set)"。
C# 集合_第10张图片

位数组

如果需要处理许多位,就可以使用类 BitArray 和结构 BitVector32。BitArray 位于命名空间System.Collections,BitVector32 位于命名空间 System.Collections.Specialized。这两种类型最重要的区别是,BitArray 可以重新设置大小,如果事先不知道需要的位数,就可以使用 BitArray,它可以包含非常多的位。BitVector32 是基于栈的,因此比较快。BitVector32 仅包含 32 位,存储在一个整数中。
C# 集合_第11张图片

static void DisplayBits(BitArray bits)
{
	foreach (bool bit in bits)
	{
		Console.Write(bit ? 1 : 0);
	}
}

BitArray bits1 = new BitArray(8);
bits1.SetAll(true);
bits1.Set(1, false);
bits1[5] = false;
bits1[7] = false;
Console.Write("initialized:");
DisplayBits(bits1);
Console.WriteLine();

你可能感兴趣的:(c#,开发语言)