集合set与映射map

  • 集合和映射都是高级的数据结构
  • 他们都是由动态数据结构(链表,二叉树)底层实现的

集合

  • 一般元素不能重复(多重集合允许元素重复)

链表实现

  • 链表中不允许重复元素出现即可实现集合
  • 但是链表的平均复杂度是O(n),所以集合复杂度是O(n2) (假设集合中有n个元素),因此效率很低
  • Java中的HashSet是结合哈希表和链表实现的集合,性能很好

二分搜索树实现

  • 二分搜索树可以自然而然地实现集合
  • 二分搜索树的优势在于每次遍历都是一分为二,一般可以少遍历很多元素,因此平均复杂度是O(log n)
  • 因此集合复杂度是O(n * log n)
  • O(log n) 比 O(n) 表现好得太多了

二分搜索树的致命缺点

  • 同样的数据,可以对应不同的二分搜索树。当二分搜索树中的元素有序添加时,比如依次添加1 2 3 4 5 6 7…,那就会形成一个链表(也就是退化成链表了),性能会大大降低!
  • 为了解决这个问题,提出了平衡二叉树(也就是红黑树),Java类库中的TreeSet就是由红黑树底层实现的

有序集合和无序集合

  • 有序集合的元素具有顺序性 —> 这是基于搜索树的实现
  • 无序集合的元素不具有顺序性 —> 这是基于哈希表的实现

映射

  • 也称字典
  • 有两个值 key、 value
  • 非常容易使用链表或者二分搜索树来实现
  • 原来的链表中每个节点至存储一个值,只要再多存储一个值,即可实现映射
  • 如果映射中的value都为null,则相当于set
  • 一般来说映射中的key不能重复,value可以重复(但是多重映射允许有重复的键)

  • 同样的,
  • 有序映射中的键具有顺序性 —> 基于搜索树的实现
  • 无序映射中的键不具有顺序性 —> 基于哈希表的实现
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值