在C#中,`List
---
### 1. **`List
- **泛型集合**:`List
- **动态数组**:`List
- **索引访问**:`List
- **线程不安全**:`List
---
### 2. **如何使用 `List
#### 2.1 创建 `List
```
using System.Collections.Generic;
// 创建一个空的 List
List
// 使用集合初始化器创建并初始化 List
List
// 从数组创建 List
int[] array = { 1, 2, 3, 4, 5 };
List
```
#### 2.2 添加元素
- **`Add(T item)`**:向列表末尾添加一个元素。
- **`AddRange(IEnumerable
- **`Insert(int index, T item)`**:在指定索引处插入一个元素。
```
numbers.Add(10);
numbers.AddRange(new int[] { 20, 30, 40 });
numbers.Insert(1, 5); // 在索引 1 处插入 5
```
#### 2.3 访问元素
- **通过索引访问**:`list[index]`。
- **`Count`**:获取列表中元素的数量。
- **`IndexOf(T item)`**:获取元素的索引(如果存在)。
- **`LastIndexOf(T item)`**:获取元素的最后一个索引。
```
int firstNumber = numbers[0]; // 访问第一个元素
int count = numbers.Count; // 获取元素数量
int index = numbers.IndexOf(20); // 查找元素 20 的索引
```
#### 2.4 删除元素
- **`Remove(T item)`**:删除第一个匹配的元素。
- **`RemoveAt(int index)`**:删除指定索引处的元素。
- **`RemoveRange(int index, int count)`**:删除指定范围内的元素。
- **`Clear()`**:清空列表。
```
numbers.Remove(20); // 删除第一个值为 20 的元素
numbers.RemoveAt(1); // 删除索引为 1 的元素
numbers.RemoveRange(2, 3); // 删除索引从 2 开始的 3 个元素
numbers.Clear(); // 清空列表
```
#### 2.5 遍历列表
- **`foreach` 循环**:逐个访问列表中的元素。
- **`for` 循环**:通过索引访问元素。
```
foreach (int number in numbers)
{
Console.WriteLine(number);
}
for (int i = 0; i < numbers.Count; i++)
{
Console.WriteLine(numbers[i]);
}
```
#### 2.6 排序和查找
- **`Sort()`**:对列表进行排序。
- **`Reverse()`**:反转列表中的元素顺序。
- **`Find(Predicate
- **`FindAll(Predicate
```
numbers.Sort(); // 升序排序
numbers.Reverse(); // 反转顺序
int firstEven = numbers.Find(x => x % 2 == 0); // 查找第一个偶数
List
```
#### 2.7 转换为其他集合
- **`ToArray()`**:将列表转换为数组。
- **`ToList()`**:将其他集合转换为 `List
```
int[] numbersArray = numbers.ToArray();
List
```
---
### 3. **`List
- **动态扩展**:`List
- **索引访问**:通过索引访问元素的时间复杂度为 O(1),非常高效。
- **添加元素**:在列表末尾添加元素的时间复杂度为 O(1),但在中间或开头插入元素的时间复杂度为 O(n)。
- **删除元素**:删除元素的时间复杂度取决于操作的位置,删除末尾元素为 O(1),删除中间或开头元素为 O(n)。
---
### 4. **线程安全**
`List
- 使用 `lock` 语句手动同步。
- 使用线程安全的集合类,如 `ConcurrentBag
```
object lockObject = new object();
lock (lockObject)
{
numbers.Add(10);
}
```
---
### 5. **总结**
`List