Map的介绍
map又被称为映射
map集合的特点
- 将键映射到值得对象,一个映射不能包含重复的键,每个键最多只能映射一个值
map和collection集合的区别- map集合存储的元素是成对出现的,map的键是唯一的,值是可以重复的
- collection集合存储的的元素是单独出现的,collection的儿子set是唯一的,List是可以重复的
- map集合的数据结构针对键有效,跟值无光
- collection集合的数据结构针对元素有效
散列
- 链表和数组可以按照人民的意愿来排列元素的次序,他们可以说是有序的(存储的顺序和取出的顺序是一致的)
- 但是缺点也很明显,想要得到某个元素,就要访问所有的元素,直到找到为止
散列表:不在意元素的顺序,能够快速的查找元素的数据
散列表的原理
散列表为每个对象计算出一个整数,称为散列码,根据计算出来的整数(散列码),保存在相应的为止上
java中,散列表用的是链表加数组实现的,每个列表称之为桶
一个桶上可能出现被占用的情况(hashCode散列表相同,就存储在同一个地方,这种情况是无法避免的,这种情况呗称为:散列冲突
- 此时需要用该对象与桶上的对象进行比较,看看该对象是否存在桶子,存在则不添加,不存在则添加
- 在jdk8中,桶满的时候链表会变成平衡二叉树
如果散列表太满了,是需要对散列表在散列的,创建一个桶数更多的散列表,并将原有的元素插入到新表,丢弃原来的表
- 装填因子(load factor),决定何时对散列表再散列
- 装填因子默认为0.75,如果表中的超过75%的位置,已经填入散列表,那么这时候表会用2倍的桶数自动进行再散列
各种树的用途
AVL树:最早的平衡二叉树之一,应用相对其他数据结构比较少,windows对进场地址空间的管理用到了AVL树
红黑树:平衡二叉树,广泛用在C++的STL中,如map和set都是用红黑树实现的
B/B+树:用于磁盘文件组织,数据索引和数据库索引
Trie树(字典树):用于统计和排序大量字符串,如自动机