• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C#教程 > 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解

解析从源码分析常见的基于Array的数据结构动态扩容机制的详解

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了arrayadapter详解,array,array是什么意思,in array,mysql fetch array等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

本文的写作冲动来源于今晚看到的老赵的一则微博“大家知道System.Collections.Generic.List<T>是一种什么样的数据结构?内部的元素是怎么存放的?还有Dictionary<TKey,TValue>呢?…”。

查了一下书,如果参考数据结构和算法里介绍的线性表合哈希表的特点,非常官方的答案就类似:List<T>是一种线性的内存连续分配的存储结构,元素是顺序存放的;它的优点是内存连续分配,相对节省空间,在设定长度范围内增加元素开销很小;缺点是查找复杂度为O(n),不如哈希结构O(1)复杂度来的快,如插入节点超过指定长度需要重新开辟内存,开销很大云云。而Dictionary<TKey,TValue>则是哈希结构,优点blahblahblah缺点blahblahblah。回答结束。

然后再看老赵微博下面的回答,似乎很不统一,多数认为是基于数组实现的,但是…擦,看一圈都没有老赵满意的答案。以前看过文章听说过StringBuilder和HashTable内部是怎么实现的,以及一个笼统的列表内存扩容两倍说,但是一直不知道具体细节也不太肯定,所以我也很想知道答案。老赵说稍微有点儿好奇心的程序员都应该会去看看两个实现的源代码。世上无难事只怕有心人,要是真的有心人顺便还应该不论对错记录一下自己的学习心得,哈哈。

注:如果你是新手,建议直接到此为止,不要再往下看了。实在好奇想知道答案,最简单正确也是我的偶像老赵所推荐的做法当然是自己查MSDN和framework源码。为了不误导人,本文再加上一个标签:无责任乱写。

一、StringBuilder

StringBuilder有6种构造函数,直接通过无参构造函数创建对象比较常见。MSDN(中文)里说“此实现的默认容量是 16,默认的最大容量是 Int32.MaxValue”。默认容量是16,16什么呢,这话怎么说得这么模糊呢?反汇编跟一下源码,看到它的构造函数最终要调用一个方法:

再分析其中带两个参数的:public StringBuilder(int capacity, int maxCapacity),它的主要实现如下:
  &

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解

相关文章

  • 2017-05-28C#中的多态深入理解
  • 2017-05-28C# 操作符之三元操作符浅析
  • 2017-05-28C#和Java有什么区别和联系
  • 2017-05-28C# KeyUp事件中MessageBox的回车(Enter)键回调问题解决方案
  • 2017-05-28C#获取ListView鼠标下的Item实例
  • 2017-05-28C#实现Menu和ContextMenu自定义风格及contextMenu自定义
  • 2017-05-28c#:CTS类型系统
  • 2017-05-28深入浅出23种设计模式
  • 2017-05-28c#哈希算法的实现方法及思路
  • 2017-05-28C# 字符串处理小工具

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C# Guid.NewGuid获得随机数
    • C#通过指针实现快速拷贝的方法
    • C# WinForm 判断程序是否已经在运行,且只允许运行一个实例,附源码
    • C#运行CGI程序实例
    • C#异常处理的一些经验和技巧
    • c#冒泡排序算法示例
    • .NET中的async和await关键字使用及Task异步调用实例
    • 使用C#实现在屏幕上画图效果的代码实例
    • C#中在WebClient中使用post发送数据实现方法
    • C#抓取当前屏幕并保存为图片的方法

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有