UPL5-9——容器选择
UPL5-9——容器选择
容器选择
所谓的容器选择就是指,在 Unity 中使用合适的数据结构类来装载数据
比如:我们常用的 List 和 Dictionary 容器,他们就各有各的优劣势
-
List:查找的时间复杂度是
但是它存储结构是连续的 -
Dictionary:查找的时间复杂度是
但是它存储结构是不连续的
所以我们在选择它们时一般会根据他们的特点来进行选择
- 经常会遍历并且中间插入较少的数据用
List - 经常会进行键值对查找的数据用
Dictionary
更多容器选择
-
HashSet<T>时间复杂度:查找/添加/删除都是 ,内部使用哈希表实现
使用场景:
只关心元素是否存在、不需要顺序、也不需要键值对映射时
一般用来存储已处理过的对象,比如当前激活的敌人列表等等 -
Queue<T>时间复杂度:入队、出队
使用场景:适合按顺序处理数据(先进先出),比如对象池中用队列存储池中对象
-
Stack<T>时间复杂度:入栈、出栈都是
使用场景:适合倒序处理数据(先进后出),行为回退、状态回溯可用 Stack
-
LinkedList<T>时间复杂度:插入、删除节点是 ,查找是
不连续内存,缓存命中率低,不推荐频繁遍历使用使用场景:需要频繁在中间插入、删除元素,但又不关心遍历性能
-
SortedDictionary<TKey, TValue>、SortedList<TKey, TValue>等特点:会自动根据 Key 排序;插入、删除、查找为 ,比
Dictionary慢,但顺序稳定使用场景:需要按顺序遍历所有键值对的数据(如:按时间调度的事件)
-
ConcurrentDictionary、ConcurrentQueue等特点:线程安全,带锁
使用场景:Unity 主线程中基本不使用,适合多线程工具层代码中
等等
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 文KRIFE齐的博客!
