* GC机制
* GC是一种自动化内存管理机制,负责在程序运行时跟踪并管理对象的内存使用情况,当对象不再被引用时,自动从内存中删除这些对象,并释放内存
* 特点:
* 1.自动管理
* 2.分代回收 代龄 高效,大部分朝生夕灭,只有少部分的对象会长时间存在
* 3.不确定性 GC.Collect()
* 4.gc会影响程序的性能
* 5.gc只回收堆区内存,栈区内存是使用后自动释放
*
*
*
* 数组:存储相同类型元素的固定大小的顺序集合
* 数据类型[] 数组名
*
* Array类
*
* ArrayList:动态数组,自动调整数组大小
* 装箱与拆箱
* 将所有的数据的都作为了object去处理
* 装箱:从值类型转换到引用类型
* 拆箱:从引用类型转换到值类型
* 一定只有经过装箱的对象才会有拆箱
* 装箱的原理:
* 1.分配堆区内存(值类型数据大小+指针大小)
* 2.将值类型数据拷贝到分配的堆区内存中
* 3.将堆区的内存地址返回
* 拆箱的原理:
* 1.获取堆区中的属于值类型的地址
* 2.将堆区中的值类型数据拷贝到栈区中的值类型实例中
*
* 性能损耗
* 1.装箱时,需要分配内存,创建新的对象
* 2.拆箱时,需要释放内存
*
* List:动态数组,泛型的
*
* LinkedList:双向链表
*
* 数组:
* 1.声明数组时,必须指定数组的大小 2.数组的插入和删除数据比较麻烦,但是查询比较快
* ArrayList:
* 可以存储任意类型数据,但是会带来装箱与拆箱的操作
* List:
* 声明时指定了数据类型,避免了装箱与拆箱,能够自动扩容
* LinkedList:
* 双向链表,插入和删除数据比较快,但是查询比较慢
*
* 栈 Stack:先进后出
* 队列 Queue:先进先出
* 哈希表 Hashtable:键值对形式存储
* 哈希冲突:不同的键值对在哈希表计算中得到的相同的哈希值
解决办法
* 1.链地址法
* 2.开放寻址法
* 字典 Dictionary:键值对形式存储
*
* 字典与哈希表区别:
* 相同点:
* 1.都是键值对形式存在,且键是唯一的,值是不唯一的,都是无序的键值对
* 2.存储的数据个数不受限制
* 3.方法高度相似
* 不同点:
* 1.键值对的类型不一样,哈希表是任意类型,字典是指定类型
* 2.命名空间不一样 哈希表System.Collections,字典System.Collections.Generic
* 3.限制类型不同,字典存储数据时限制类型,哈希表是存储任意类型
* 4.性能不同,哈希表存在装箱与拆箱,字典不存在装箱与拆箱
测试GC在性能中的占用
数组创建与使用
ArrayList动态数组的创建与使用
object效率低下的原因:装箱和拆箱
所以在正常使用中一般不使用ArrayList,虽然可以装下任意类型,但是因为是object涉及装箱和拆箱的时间,会导致效率低下,而下述List采用泛型效率更高。
List动态数组的创建与使用
LinkedList双向链表的创建与使用
Stack栈的创建与使用
Queue队列的创建和使用
Hashtable哈希表的创建和使用
Ps:解决哈希冲突
Dictionary字典的创建和使用