C# 编程/.NET 框架/集合
外观
< C Sharp 编程 | .NET 框架
列表是动态数组,可以根据需要调整自身大小,如果插入的数据量超过其插入时的容量。可以在任何索引处插入项目、在任何索引处删除项目以及在任何索引处访问项目。C# 的非泛型列表类是 ArrayList
,而泛型列表类是 List<T>
。
以下示例演示了 List
类中的许多方法和属性。
using System;
using System.Collections;
using System.Collections.Generic;
namespace csharp_generic_list
{
class MainClass
{
public static void Main(string[] args)
{
Console.WriteLine("List<T> demo");
// Creating an instance that accepts strings
List<string> foods = new List<string>();
// Adding some items one by one with Add()
foods.Add("bread");
foods.Add("butter");
foods.Add("chocolate");
// Adding a simple string array with AddRange()
string[] subList1 = {"orange", "apple", "strawberry", "grapes", "kiwi", "banana"};
foods.AddRange(subList1);
// Adding another List<string> with AddRange()
List<string> anotherFoodList = new List<string>();
anotherFoodList.Add("yoghurt");
anotherFoodList.Add("tomato");
anotherFoodList.Add("roast beef");
anotherFoodList.Add("vanilla cake");
foods.AddRange(anotherFoodList);
// Removing "orange" with Remove()
foods.Remove("orange");
// Removing the 5th (index = 4) item ("strawberry") with RemoveAt()
foods.RemoveAt(4);
// Removing a range (4-7: all fruits) with RemoveRange(int index, int count)
foods.RemoveRange(3, 4);
// sorting the list
foods.Sort();
// Printing the sorted foods
foreach (string item in foods)
{
Console.Write("| " + item + " ");
}
Console.WriteLine("|");
// Removing all items from foods
foods.Clear();
// Printing the current item count in foods
Console.WriteLine("The list now has {0} items.", foods.Count);
}
}
}
终端输出为
List<T> demo | bread | butter | chocolate | roast beef | tomato | vanilla cake | yoghurt | The list now has 0 items.
链表中的项目只能按顺序逐个访问。当然,可以访问任何索引处的项目,但列表必须从第一个项目开始迭代到该项目,这比在数组或列表中按索引访问项目要慢得多。C# 中没有非泛型链表,而泛型链表是 LinkedList<T>
。
队列是 FIFO(先进先出)集合。第一个推入队列的项目将使用 pop 函数第一个弹出。在任何时候,只有第一个项目是可访问的,并且项目只能放入末尾。非泛型队列类称为 Queue,而泛型队列类是 Queue<T>
。
栈是 LIFO(后进先出)集合。第一个推入的项目将使用 pop 函数最后弹出。在任何时候,只有最后一个项目是可访问的,并且项目只能放在顶部。非泛型栈类是 Stack,而泛型栈类是 Stack<T>
。
字典是具有键值的集合。值可以非常复杂,但搜索键仍然很快。非泛型类是 Hashtable
,而泛型类是 Dictionary<TKey, TValue>
。