1. 哈希表
哈希表(Hash table),又称散列表。是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
在一般的数组中,元素在数组中的索引位置是随机的,元素的取值和元素的位置之间不存在确定的关系,因此,在数组中查找特定的值时,需要把查找值和一系列的元素进行比较。
此时的查询效率依赖于查找过程中所进行的比较次数。
如果元素的值(value)和在数组中的索引(index)位置有一个确定关系(hash)。
公式: index = hash(value);
那么对于给定的值,只要调用上述的hash(value)方法,就可以找到数组中值为value的元素的位置。
如果数组中元素的值和索引位置存在对应的关系,这样的数组就称之为哈希表,可以看出哈希表最大的优点就是提供查找数据的效率。
一般情况下,我们是不会把哈希表(hashcode)作为元素中的索引位置的,因为哈希码很大,数组长度是有限的,会造成索引越界。
这个时候,我们可以在哈希码和元素位置之间做某种映射光学。
元素值 —> hash(value)—> 哈希码----某种映射关系—> 也是存储的索引
注意:每个对象的哈希吗是不同的。
哈希表的插入和查找是很优秀的。
可是当哈希表接近装满的时候,因为数组的扩容问题,性能较低(转移到更大的哈希表中)。
java中默认的加载因子:0.75
数组会记录添加顺序的,按照索引来存储,允许元素的重复。
哈希表中:元素时不能重复的,对象如果相同,则hashcode相同—> index相同。
不会记录元素添加的先后顺序
树结构在做范围查询的时候,性能超群,一般的用来做索引的结构。