【玩转数据结构Part3】集合和映射

集合和映射是一种高级的数据结构,它的底层是由BST实现的。
栈和队列的底层,既可以是动态数组,也可以是链表,是BST

集合set(支持增删查)

去重操作,而BST中不含有重复元素,因此BST是实现集合非常好的一个数据结构。

添加元素add

查找元素contains

删除元素remove

总结& 分析

使用BST和链表都可以实现集合。用BST性能更好。
分析链表和BST实现集合的平均时间复杂度:

链表实现的集合LinkListSetBST实现集合 BSTSet
增加 addO(n)O(logn)(最差为O(n))
查找 containsO(n)O(logn)(最差为O(n))
删除 removeO(n)O(logn)(最差为O(n))

集合又分为有序集合和无序集合。
有序集合的元素具有顺序性,可以从小到大遍历,有序集合基于搜索树来实现;
无需集合的元素没有顺序性,只是单纯按照插入的顺序排列,无序集合基于哈希表来实现。(用链表实现效率太低,因此用哈希表来实现比较多,哈希表实现比搜索树还要快)

此外,还有多重集合(允许有重复的元素),可以根据实际需要修改。

映射map(也称字典,支持增删改查)

添加元素add

查找元素contains

删除元素remove

修改元素

总结& 分析

可以使用链表来实现映射,也可以使用BST来实现映射。使用BST的性能要远远高于链表实现的映射。复杂度分析与集合是相同的,

链表实现的集合LinkListMapBST实现集合 BSTMap
增加 addO(n)O(logn)(最差为O(n))
删除 removeO(n)O(logn)(最差为O(n))
修改 setO(n)O(logn)(最差为O(n))
查找 contains(get)O(n)O(logn)(最差为O(n))

映射也分为有序映射和无序映射。
有序映射的key具有顺序性,可以从小到大遍历,有序映射基于搜索树来实现;
无需映射的key没有顺序性,只是单纯按照插入的顺序排列,无序映射基于哈希表来实现。(用链表实现效率太低,因此用哈希表来实现比较多,哈希表实现比搜索树还要快)

也有多重映射。

集合和映射的关系

集合和映射可以互相重定义(重定义集合中的元素:将键值对当作元素,存入集合,就相当于用集合构建了映射)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值