C语言中有一种特殊的结构叫做联合体,这种数据结构的定义和内存分配问题这里不具体说明。
苹果源代码中实现一个哈希表的过程中就使用到了联合体。
由于哈希表的结构中有一个“桶”的概念,因此使用联合体就是为了解决散列表中的桶碰撞的问题。
当桶中只有一个元素时,桶指针会直接指向这个数据元素本身的地址;当桶中有多个元素时,这些元素会放在一个数组中,桶指针会指向这个数组首地址。
此时的桶内可能的数据结构就可能有两种,要么是唯一的数据,要么是一个数组。
因此苹果就将桶的数据结构设计为联合体,很合理地描述了这个桶的特性。