技术分享PPT整理(二):C#常用类型与数据结构

本文探讨了C#中的装箱与拆箱概念,解释了值类型和引用类型之间的转换,并详细介绍了堆与栈的区别。文章通过ArrayList、Dictionary和List的比较,阐述了数据结构对性能的影响,尤其是装箱操作带来的性能损耗。同时,分析了HashTable、Dictionary和List的内部工作原理,以及哈希冲突的解决策略,如开放寻址法和链表法。
摘要由CSDN通过智能技术生成

这篇博客起源于我对Dictionary、List、ArrayList这几个类区别的好奇,当时在改造公司的旧系统,发现很多地方使用了ArrayList,但我们平时用的多是泛型集合List,改造的时候要全部替换成泛型集合,原本我对于这几个集合类就有些疑问,所以稍微做了些功课。

装箱与拆箱

在开始分析集合类之前先简单说下装箱拆箱的概念,在实际的开发中,也许我们很少提到这个概念,但它实际上遍布我们的开发过程,并且对性能有很大的影响,首先来了解一下什么是装箱和拆箱:

装箱和拆箱是值类型和引用类型之间相互转换是要执行的操作。

  1. 装箱在值类型向引用类型转换时发生
  2. 拆箱在引用类型向值类型转换时发生
int i = 123;
object o = (object)i; // 将int转object,发生装箱
int j = (int)o; // 从object转回原来的类型,解除装箱

通过上面的说明和例子可以看到,这是一个很简单的概念,实际上就是在我们进行类型转换时发生的一种情况,但如果我们再深入一些可以从数据结构的角度来更清晰地解释这个问题,先看下面两个例子:

值类型

int i = 123;
object o = i; // 装箱会把i的值拷贝到o
i = 456;  // 改变i的值

// i的变化不会影响到o的值
Console.WriteLine("{0},{1}", i,o);

原始值类型和装箱的对象使用不同的内存位置,因此能够存储不同的值。

引用类型

public class ValueClass
{
    public int value = 123;
    public void Test()
    {
        ValueClass b = new ValueClass();
        ValueClass a = b;
        b.value = 456;
        Console.WriteLine("{0},{1}", a.value, b.value);
    }
}

两个变量指向同一块内存数据,当一个变量对内存区数据改变之后,另一个变量指向的数据当然也会改变。

简单地说,值类型的赋值相当于直接将物品交给另一个人,而引用类型的赋值相当于将一个存放了物品的地址复制给另一个人,每当有人来找的时候,再根据地址去找到物品,地址没有发生改变的情况下,将里面的物品替换,那么后面所有顺着线索找过来的人拿到的都是被替换的物品。如果以数据结构的知识来看,引用类型和值类型就是分别存放在堆和栈里面的数据。

堆与栈

我们把内存分为堆空间和栈空间:

  • 线程堆栈:简称栈Stack,栈空间比较小&#
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这本书是什么? * 这本电子书严格来说是我复习C#基础知识来的,我从09年初开始使用asp.net进行b/s开发,之前一直使用asp。在实际开发中深感C#的强大,也深深感到自身基础知识的欠缺,因此重新从头开始学习C#,在学习的过程中最主要是借助Illustrator C# 2008(译名:插图详解C#2008或C#图解教程)这本书,(准确讲,这本电子书可以说是我对Illustrator C# 2008的读书笔记)同时查阅了msdn及许多相关的资料 ,前后近两个月;但本系列尚未完成,目前还有多线程及涉及C# 3.0中的新知识没有完成。 * 这本书有什么? * 本电子书一共21节,主要包含本人实际项目中自我感到难点的东西,如委托、事件、泛型等,进行了个人的一些总结的归纳,最后附一个我做的WinForm程序。 * 这本书适合哪些人? * 这本书内容其实很少,你可以很快就可看完;内容也只是十分简陋,主要是我本人在实现应用的体会的难点问题的总结。再加上我本人技术水平十分有限,因此我要提前声明:由于内容简略,不适合新手,以免误人子弟;内容浅显,更不适合老鸟。我本人也是抱着交流学习的目的将它发布的,欢迎大家针对本书内容的问题进行交流探讨。 * 最后,极力向大家推荐Illustrator C# 2008,不要被它的名字迷惑,认为它只是一本入门级的读物;作者是技术专家,对C#有极其深刻的见解;语言十分流畅,书中的插图十分形象易懂,从头到尾内容循序渐进,层层递进,尤其对内存分配有着详尽的描述。无论是新手还是老手,绝对值得一读。中文版翻译也还可以,如果英文好的话建议直接阅读英文版。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值