当前位置: 首页 > news >正文

请说明C#中的List是如何扩容的?

在 C# 中,List<T>是一个动态数组,它会根据需要自动调整其容量以容纳更多的元素。

目录

 1  扩容条件与扩容算法规则

 2  总结


 1  扩容条件与扩容算法规则

当你创建一个新的List<T>实例时,如果没有指定初始容量,它会使用默认的初始容量,这个默认值通常是 0 。当你第一次添加元素时,List<T> 会将容量初始化为一个预设的值,在 .NET 中,这个预设值是 4。

        List<int> list = new List<int>();
        Console.WriteLine($"初始容量: {list.Capacity}"); // 输出: 0
        list.Add(1);
        Console.WriteLine($"添加一个元素后的容量: {list.Capacity}"); // 输出: 4

当你向List<T>之中添加元素,并且超过了他的容量的时候,List就会自动扩容。

List扩容算法是将当前容量乘以 2 (在某些早期版本的 .NET 中可能会有不同的实现,但大多数情况下是乘以 2 )。例如,如果当前容量是 4,当需要扩容时,新的容量会变为 8;如果当前容量是 8,新的容量会变为 16,依此类推。

我们举个例子:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> list = new List<int>();
        for (int i = 0; i < 30; i++)
        {
            list.Add(i);
            Console.WriteLine($"添加元素 {i} 后,元素数量: {list.Count}, 容量: {list.Capacity}");
        }
    }
}

为了避免频繁的扩容操作带来的性能开销,你可以在创建List<T>实例时手动指定初始容量。例如:

        public static void Main(string[] args)
        {
            // 指定初始容量为 20
            List<int> list = new List<int>(20); 
            Console.WriteLine($"初始容量: {list.Capacity}"); // 输出: 20
        }

 2  总结

List<T>的扩容机制是自动且动态的,当元素数量超过当前容量时,会将容量扩大为原来的 2 倍。扩容过程涉及到新数组的分配、元素的复制和原数组的释放,可能会带来一定的性能开销。因此,在已知元素数量大致范围的情况下,手动指定初始容量可以提高性能。扩容过程主要包含以下几个步骤:

  • 分配新数组:根据新的容量在内存中分配一个更大的数组
  • 复制元素:将原数组中的所有元素复制到新数组中。
  • 释放原数组:原数组的内存会被释放,由垃圾回收器进行处理
  • 更新引用:List<T>内部会更新其对数组的引用,指向新分配的数组

相关文章:

  • 10.Docker 仓库管理
  • 《Keras 2 :使用 RetinaNet 进行对象检测》:此文为AI自动翻译
  • 运维基线方案说明
  • AI学习指南HuggingFace篇-Hugging Face 的核心工具
  • windows11那些事
  • 计算机毕业设计Hadoop+Spark+DeepSeek-R1大模型民宿推荐系统 hive民宿可视化 民宿爬虫 大数据毕业设计(源码+LW文档+PPT+讲解)
  • k2路由器登录校园网
  • 如何确定虚函数在虚函数表中的位置3 (Linux x64版本)
  • Python----数据结构(哈希表:哈希表组成,哈希冲突)
  • [漏洞篇]文件上传漏洞详解
  • Nacos学习(一)——基本介绍、安装与负载均衡策略
  • MySQL 面试总结
  • TCP三次握手 四次挥手:一场“确认眼神”与“礼貌告别”的对话
  • Linux中ps -ef命令详解
  • 开源低代码平台与 Vue.js
  • JVM篇:内存分区及作用及各部分可能发生的异常
  • 前端八股——计算机网络+浏览器原理
  • 编程小白冲Kaggle每日打卡(12)--kaggle学堂:<机器学习简介>模型如何工作
  • 《论模型驱动架构设计方法及其应用》审题技巧 - 系统架构设计师
  • 为AI聊天工具添加一个知识系统 之117 详细设计之58 思维导图及观察者效应 之2 概念全景图
  • 中俄就应对美加征所谓“对等关税”等问题进行深入交流
  • 俄罗斯今日将举行“胜利日”阅兵,有何看点?
  • 江苏省泰州市委常委、宣传部部长刘霞接受审查调查
  • 象屿集团:对去化压力大、市场有效需求不足区域坚决暂停投资,打造多元上市路径
  • 中国驻俄大使张汉晖人民日报撰文:共襄和平伟业,续谱友谊新篇
  • 巴基斯坦军方:印度向巴本土及巴控克什米尔发射导弹