List
内部是用数组实现的,效率并不高,只是通用性强。
如果可以的话,最好在构造List时提前告知它最多会有多少元素存在里面,避免List频繁抛弃原有数组申请新数组。
没有对多线程做任何锁或同步操作,因此在多线程中使用时要自己加安全机制(加锁)。
Dictionary
由数组构成,由哈希函数完成地址构建,通过拉链法解决冲突。
哈希函数:元素的关键字K为自变量,映射到元素的存储地址。
拉链法:将具有相同散列地址的关键字的值放在同一个单链表中。
实例化时最好能确定大致数量。
用值做key比用类实例做key更高效。
在多线程中使用时需自己加lock。
事件
在delegate的基础上再做了一次封装,限制用户操作delegate委托实例中变量的权限。
- 不能直接赋值
- 可以通过注册+=或注销-=来增减数量。避免用了=后清空之前累积的委托链表
栈和堆
栈:生命周期必须确定,销毁时按次序销毁,后进先出。
堆:生命周期不确定(随时可释放)
struct
何时使用?
当使用“=”时,想要传递的是该对象的副本还是该对象的引用(对象本身)?
若是副本,则用struct。
网友评论