16.集合类
.NET Framework提供了几个
泛型类
,它们集合元素,并允许应用程序以特殊方式访问这些元素。
下面一个个的学
- List<T>集合类
List<T>相比数组使用起来方便很多,创建时无需指定容量,会随着元素的增加或减少来自动伸缩,用.
号可以call出Remove
(从集合中删除指定元素),Add
(在集合尾部添加元素),Insert
(在集合指定位置插入元素),Sort
(对数据排序)等方法。
List<int> numbers = new List<int>();
foreach (int number in new int[12] { 10, 9, 8, 7, 7, 6, 5, 10, 4, 3, 2, 1 })
{
numbers.Add(number); //Add方法的参数是要加入集合的值
}
numbers.Insert(numbers.Count - 1, 99); //Insert方法的参数是插入位置,和插入的值
numbers.Remove(7); //Remove方法的参数是要删除的元素的值,此即第一个为7的元素
numbers.RemoveAt(6); //RemoveAt方法的参数是元素索引,此即第7个元素
Console.WriteLine($"current count of the list is: {numbers.Count}"); //这里可以看一下还有多少元素
foreach (int number in numbers)
{
Console.WriteLine(number);
}
numbers.Sort(); //Sort方法无参数,按照默认方法(从小到大)来重新排列整个集合
foreach (int number in numbers)
{
Console.WriteLine(number);
}
由于是泛型类,也可以使用List<string> strs = new List<string>
来新建一个string的集合,和上述方法同样的操作集合
- LinkedList<T>集合类
LinkedList<T>集合类实现了双向链表,列表中每一项除了容纳数据项的值,还有对下一项的引用(Next属性)和对上一项的引用(Previous属性)。
LinkedList不支持用数组语法来插入和检查元素。可以用AddFirst
方法从开头插入,也可以用AddLast
方法从末尾插入元素。还可以使用AddBefore
和AddAfter
在指定项前或后插入元素。删除的方法是Remove
,RemoveFirst
,RemoveLast
LinkedList<int> numbers = new LinkedList<int>();
foreach(int number in new int[] { 10,8,6,4,2})
{
numbers.AddFirst(number); //从10开始加入集合,10在队尾
}
for(LinkedListNode<int> node = numbers.First; node!=null;node=node.Next)
{
int number = node.Value;
Console.WriteLine(number); //输出2,4,6,8,10
}
如果用numbers.AddLast
方法创建集合呢?则输出的是10,8,6,4,2
继续
numbers.Remove(6); //Remove方法的参数是要删除的元素值
numbers.Remove(7); //即使集合里没有这个值,也不会报错,元素还是保持不变
numbers.AddAfter(numbers.Find(4), 9); //在4的后面添加9,这里使用了Find方法
-
Queue<T>
Queue
实现先入先出队列,元素在队尾插入Enqueue
,从队头移出Dequeue
比如一个集合{9,3,7,2},Enqueue的顺序是9->3->7->2,Dequeue的顺序仍然是9->3->7->2 -
Stack<T>
Stack
实现先入后出队列,元素从队头入栈push
,也从队头出栈pop
,所以最后一个入栈的总是第一个被取走的,可以想象一叠盘子,新的盘子放在顶上,拿走的时候也是从顶上开始拿
前面那个例子,{9,3,7,2},push的顺序是9->3->7->2,pop的顺序就变成了2->7->3->9