RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 639301
Accepted
Andrew_STOP_RU_AGRESSION_IN_UA
Andrew_STOP_RU_AGRESSION_IN_UA
Asked:2020-03-14 18:31:44 +0000 UTC2020-03-14 18:31:44 +0000 UTC 2020-03-14 18:31:44 +0000 UTC

C# 列表与链表与数组

  • 772

List对LinkedList对对Array

在什么情况下使用比较好?

C#-FAQ问题对于通过面试很有用,从理论角度也很有用。

c#
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    Andrew_STOP_RU_AGRESSION_IN_UA
    2020-03-14T18:31:44Z2020-03-14T18:31:44Z

    我做了一些测试。我想很多人会对结果感兴趣。链接上的测试源: https ://github.com/ukushu/DataStructuresTests.git


    简短的结论:

    • 应该使用数组:

      • 尽可能频繁,如果可能(性能和内存优化)
      • 如果不需要添加单元格
      • 如果预期重量 < 85000b
      • 如果您需要随机访问速度
    • 应该使用列表:

      • 如果您需要将单元格添加到列表的末尾(大/小)
      • 如果您需要将单元格添加到列表的开头/中间(少量)
      • 如果预期重量 < 85000b
      • 如果您需要随机访问速度
      • 如果可能,最好使用已键入的元素数进行初始化。
    • 链表

      • 如果您需要在工作表的开头/中间/结尾大量添加单元格
      • 如果只需要顺序访问(随机访问不需要索引)
      • 非常适合存放相对少量的重物。对于每个单元格,您还需要为 2 个链接分配内存。

    详细调查结果:

    • 浅红色背景是不好的结果。
    • 黄色背景——正常(平均)结果。
    • 浅绿色背景是一个很好的结果。

    在此处输入图像描述


    还有一些有趣的信息:

    1. LinkedList 在内部根本不是 .NET 语言中的列表。LinkedList<T>. 它甚至没有在IList<T>. 这就是为什么没有索引和与索引关联的方法的原因。

    2. LinkedList<T>是一个基于节点指针的集合。在 .NET 中,这是在双向链接实现中实现的,即每个元素都引用它的前一个和后一个。还有数据将被分散的事实。工作表中的不同对象将位于 RAM 中的不同位置。这也意味着在 under 下将使用LinkedList<T>比List<T>or下更多的内存Array,从测试中可以看出。

    3. Array<T>像List<T>(在 .Net 中,它是一个可调整大小的数组包装器)将 RAM 内存保留为一个长块。如果总元素大小 > 85000 字节,它将被重新分配到大对象堆。这反过来又会导致堆碎片——类似于轻微形式的内存泄漏。

    4. List<T>如果在内存中创建的不是空的,而是大约超过所需大小,则内存中的内存将占用更少的内存。也就是说,如果您期望工作表应该有 1000 个单元格,那么它将作为一个包含 1000 个单元格的数据数组。如果您将其创建为空并填充多达 1000 个单元格,则需要更多,如测试所示。

    重要如果有人发现错误 - 请在评论中指出。不管错误是在代码中,还是在我的测试中,还是在我的结论中。:)

    • 26

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5