集合类与泛型编程全面解析
发布时间: 2025-08-17 00:31:31 阅读量: 1 订阅数: 6 

# 集合类与泛型编程全面解析
## 1. 队列(Queue)
队列是一种按照先进先出(FIFO)顺序返回元素的数据结构,类似于客服台前排的队伍,先到的人先接受服务。以下是队列的一些重要属性和方法:
| 属性/方法 | 用途 |
| --- | --- |
| Clear | 从队列中移除所有元素 |
| Contains | 如果队列包含特定对象,则返回 True |
| CopyTo | 将队列类的部分或所有对象复制到一维数组中 |
| Count | 返回队列中元素的数量 |
| Dequeue | 返回队列中最早进入的元素,并将其从队列中移除 |
| Enqueue | 将元素添加到队列的末尾 |
| Peek | 返回队列中最早进入的元素的引用,但不将其从队列中移除 |
| ToArray | 返回一个包含队列中对象引用的一维数组,队列中最早的元素位于数组的首位 |
| TrimToSize | 释放队列中的空闲空间,使其容量等于实际包含的元素数量 |
队列在按创建顺序处理元素时特别有用。例如,订单处理应用程序可以将订单存储在队列中,确保先下单的客户先得到满足。
为了更高效地管理内存,队列类提供了四个重载构造函数:
1. 无参数构造函数:分配默认的初始容量,队列满时按默认增长因子扩大。
2. 带初始容量参数的构造函数:可指定初始容量,若知道要添加的元素数量,可节省时间,同样使用默认增长因子。
3. 带实现 ICollection 接口对象参数的构造函数:分配足够的空间来容纳集合中的元素,并将其复制到队列中,使用默认增长因子。
4. 带初始容量和增长因子(1.0 到 10.0 之间)参数的构造函数:增长因子越大,队列调整大小的频率越低,但可能包含大量未使用的空间。
以下是队列操作的示例代码:
```vb
Imports System.Collections
Module Module1
Sub Main()
Dim queue As New Queue()
queue.Enqueue("Item1")
queue.Enqueue("Item2")
queue.Enqueue("Item3")
Console.WriteLine("Queue Count: " & queue.Count)
Console.WriteLine("Dequeued Item: " & queue.Dequeue())
Console.WriteLine("Peeked Item: " & queue.Peek())
Console.WriteLine("Queue Contains 'Item2': " & queue.Contains("Item2"))
Dim array() As Object = queue.ToArray()
For Each item In array
Console.WriteLine(item)
Next
queue.Clear()
Console.WriteLine("Queue Count after Clear: " & queue.Count)
End Sub
End Module
```
## 2. 泛型(Generics)
泛型类将一个或多个数据类型作为参数,其实例会用具体的数据类型填充这些参数。Visual Basic 提供了许多预建的泛型集合类,位于 `System.Collections.Generic` 命名空间中。
### 2.1 泛型的优势
与非泛型类相比,泛型类具有以下优势:
- **强类型**:方法可以接受和返回具有类实例类型的参数和值,减少意外添加错误类型对象的可能性。例如,`List(Of String)` 只能存储字符串,其 `Add` 方法只能添加字符串,`Item` 方法返回字符串值。
- **智能感知**:强类型使得 Visual Studio 能够提供智能感知,帮助开发者更方便地编写代码。
- **无装箱操作**:泛型类直接操作特定数据类型的对象,避免了将对象转换为和从 `Object` 数据类型转换的过程,提高了代码效率。
- **代码复用**:可以使用泛型类处理多种数据类型,减少代码重复。例如,一个泛型 `PriorityQueue` 类可以用于存储 `Employee`、`Customer`、`Order` 或其他对象。
### 2.2 泛型集合类的使用
以下是使用泛型集合类的示例代码:
```vb
Imports System.Collections.Generic
Module Module2
Sub Main()
Dim places As New List(Of String)
places.Add("Chicago")
places.Add("New York")
For Each place In places
Console.WriteLine(place)
Next
End Sub
End Module
```
### 2.3 扩展泛型类
虽然不能直接修改泛型集合类,但可以为其添加扩展方法。例如,为 `List(Of Person)` 类添加 `AddPerson` 方法:
```vb
Imports System.Runtime.CompilerServices
Module PersonListExtensions
<Extension()>
Public Sub AddPerson(person_list As List(Of Person), first_name As String, last_name As String)
Dim per As New Person() With {.FirstName = first_name, .LastName = last_name}
person_list.Add(per)
End Sub
End Module
Class Person
Public Property FirstName As String
Public Property LastName As String
End Class
```
还可以从泛型类派生增强的集合类。例如,定义一个继承自 `List(Of Employee)` 的 `EmployeeList` 类,并添加重载的 `Add` 方法:
```vb
Imports System.Collections.Generic
Public Class EmployeeList
Inherits List(Of Employee)
Public Overloads Sub Add(first_name As String, last_name As String)
Dim emp As New Employee(first_name, last_name)
MyBase.Add(emp)
End Sub
End Class
Class Employee
Public Sub New(first_name As String,
```
0
0
相关推荐









