集合提供了一种动态存储多个对象的方法。与数组不同,集合可以根据需要动态调整大小,并提供了多种操作数据的工具。
using System;
using System.Collections.Generic;
public class ListExample
{
public static void Main(string[] args)
{
List fruits = new List() { "Apple", "Banana", "Cherry" };
fruits.Add("Date");
Console.WriteLine($"Count: {fruits.Count}"); // 输出:4
foreach (var fruit in fruits)
{
Console.WriteLine(fruit);
}
}
}
List numbers = new List { 10, 20, 30, 40 };
numbers.Add(50); // 增加元素
numbers.RemoveAt(0); // 移除第一个元素
numbers.Sort();
numbers.Reverse();
bool hasValue = numbers.Contains(30);
int index = numbers.IndexOf(20);
using System;
using System.Collections.Generic;
public class DictionaryExample
{
public static void Main(string[] args)
{
Dictionary studentNames = new Dictionary();
studentNames.Add(1, "Alice");
studentNames[2] = "Bob";
if (studentNames.TryGetValue(1, out string name))
{
Console.WriteLine(name); // 输出:Alice
}
}
}
Dictionary inventory = new Dictionary
{
{ "Apples", 10 },
{ "Bananas", 20 }
};
inventory["Cherries"] = 15; // 添加或更新
int appleCount;
if (inventory.TryGetValue("Apples", out appleCount))
{
Console.WriteLine($"Apples: {appleCount}");
}
inventory.Remove("Bananas");
using System;
using System.Collections.Generic;
public class HashSetExample
{
public static void Main(string[] args)
{
HashSet colors = new HashSet();
colors.Add("Red");
colors.Add("Blue");
colors.Add("Red"); // 无法添加重复项
Console.WriteLine($"Count: {colors.Count}"); // 输出:2
}
}
var setA = new HashSet { 1, 2, 3 };
var setB = new HashSet { 3, 4, 5 };
setA.UnionWith(setB); // setA = { 1, 2, 3, 4, 5 }
setA.IntersectWith(setB); // setA = { 3 }
setA.ExceptWith(setB); // setA = { 1, 2 }, assuming original setA was reset
foreach (var item in setA)
{
Console.WriteLine(item);
}
using System;
using System.Collections.Generic;
public class QueueExample
{
public static void Main(string[] args)
{
Queue tasks = new Queue();
tasks.Enqueue("Task1");
tasks.Enqueue("Task2");
while (tasks.Count > 0)
{
Console.WriteLine(tasks.Dequeue());
}
}
}
线程安全:Queue
Queue queue = new Queue();
queue.Enqueue("Task1");
queue.Enqueue("Task2");
Console.WriteLine(queue.Peek()); // 输出:Task1
Console.WriteLine(queue.Dequeue()); // 输出:Task1
Console.WriteLine(queue.Dequeue()); // 输出:Task2
using System;
using System.Collections.Generic;
public class StackExample
{
public static void Main(string[] args)
{
Stack history = new Stack();
history.Push("Page1");
history.Push("Page2");
while (history.Count > 0)
{
Console.WriteLine(history.Pop());
}
}
}
Stack stack = new Stack();
stack.Push("Page1");
stack.Push("Page2");
Console.WriteLine(stack.Peek()); // 输出:Page2
Console.WriteLine(stack.Pop()); // 输出:Page2
Console.WriteLine(stack.Pop()); // 输出:Page1
线程安全:Stack
Queue和Stack结合:模拟一个简单的任务系统,其中任务以字符串形式存储。在任务完成后,从队列中移除。但是,在每次处理之前,将当前任务存入一个执行历史栈中。
using System;
using System.Collections.Generic;
public class TaskSystem
{
public static void Main(string[] args)
{
Queue taskQueue = new Queue();
Stack taskHistory = new Stack();
// 添加任务到队列
taskQueue.Enqueue("Task1");
taskQueue.Enqueue("Task2");
taskQueue.Enqueue("Task3");
// 执行任务并保存历史
while (taskQueue.Count > 0)
{
string currentTask = taskQueue.Peek(); // 查看但不移除
taskHistory.Push(currentTask); // 放入历史栈
Console.WriteLine($"Processing {currentTask}");
taskQueue.Dequeue(); // 完成后从队列移除
}
Console.WriteLine("\nTask History:");
while (taskHistory.Count > 0)
{
Console.WriteLine(taskHistory.Pop());
}
}
}