集合和映射是一种高级的数据结构,它的底层是由BST实现的。
栈和队列的底层,既可以是动态数组,也可以是链表,是BST
文章目录
集合set(支持增删查)
去重操作,而BST中不含有重复元素,因此BST是实现集合非常好的一个数据结构。
添加元素add
查找元素contains
删除元素remove
总结& 分析
使用BST和链表都可以实现集合。用BST性能更好。
分析链表和BST实现集合的平均时间复杂度:
链表实现的集合LinkListSet | BST实现集合 BSTSet | |
---|---|---|
增加 add | O(n) | O(logn)(最差为O(n)) |
查找 contains | O(n) | O(logn)(最差为O(n)) |
删除 remove | O(n) | O(logn)(最差为O(n)) |
集合又分为有序集合和无序集合。
有序集合的元素具有顺序性,可以从小到大遍历,有序集合基于搜索树来实现;
无需集合的元素没有顺序性,只是单纯按照插入的顺序排列,无序集合基于哈希表来实现。(用链表实现效率太低,因此用哈希表来实现比较多,哈希表实现比搜索树还要快)
此外,还有多重集合(允许有重复的元素),可以根据实际需要修改。
映射map(也称字典,支持增删改查)
添加元素add
查找元素contains
删除元素remove
修改元素
总结& 分析
可以使用链表来实现映射,也可以使用BST来实现映射。使用BST的性能要远远高于链表实现的映射。复杂度分析与集合是相同的,
链表实现的集合LinkListMap | BST实现集合 BSTMap | |
---|---|---|
增加 add | O(n) | O(logn)(最差为O(n)) |
删除 remove | O(n) | O(logn)(最差为O(n)) |
修改 set | O(n) | O(logn)(最差为O(n)) |
查找 contains(get) | O(n) | O(logn)(最差为O(n)) |
映射也分为有序映射和无序映射。
有序映射的key具有顺序性,可以从小到大遍历,有序映射基于搜索树来实现;
无需映射的key没有顺序性,只是单纯按照插入的顺序排列,无序映射基于哈希表来实现。(用链表实现效率太低,因此用哈希表来实现比较多,哈希表实现比搜索树还要快)
也有多重映射。
集合和映射的关系
集合和映射可以互相重定义(重定义集合中的元素:将键值对当作元素,存入集合,就相当于用集合构建了映射)