跳转到内容

C# 编程/.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>

华夏公益教科书