散列

Map的介绍

map又被称为映射

map集合的特点

  • 将键映射到值得对象,一个映射不能包含重复的键,每个键最多只能映射一个值
    map和collection集合的区别
  • map集合存储的元素是成对出现的,map的键是唯一的,值是可以重复的
  • collection集合存储的的元素是单独出现的,collection的儿子set是唯一的,List是可以重复的
  1. map集合的数据结构针对键有效,跟值无光
  2. collection集合的数据结构针对元素有效

散列

  • 链表和数组可以按照人民的意愿来排列元素的次序,他们可以说是有序的(存储的顺序和取出的顺序是一致的)
  • 但是缺点也很明显,想要得到某个元素,就要访问所有的元素,直到找到为止

散列表:不在意元素的顺序,能够快速的查找元素的数据

散列表的原理

散列表为每个对象计算出一个整数,称为散列码,根据计算出来的整数(散列码),保存在相应的为止上

java中,散列表用的是链表加数组实现的,每个列表称之为桶

一个桶上可能出现被占用的情况(hashCode散列表相同,就存储在同一个地方,这种情况是无法避免的,这种情况呗称为:散列冲突

  • 此时需要用该对象与桶上的对象进行比较,看看该对象是否存在桶子,存在则不添加,不存在则添加
  • 在jdk8中,桶满的时候链表会变成平衡二叉树

如果散列表太满了,是需要对散列表在散列的,创建一个桶数更多的散列表,并将原有的元素插入到新表,丢弃原来的表

  • 装填因子(load factor),决定何时对散列表再散列
  • 装填因子默认为0.75,如果表中的超过75%的位置,已经填入散列表,那么这时候表会用2倍的桶数自动进行再散列

各种树的用途

AVL树:最早的平衡二叉树之一,应用相对其他数据结构比较少,windows对进场地址空间的管理用到了AVL树
红黑树:平衡二叉树,广泛用在C++的STL中,如map和set都是用红黑树实现的
B/B+树:用于磁盘文件组织,数据索引和数据库索引
Trie树(字典树):用于统计和排序大量字符串,如自动机

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值