集合知识点
HashMap底层
1.8前数组+链表 1.8后数组+链表/红黑树
当添加一个元素(key-value)时,就首先计算元素key的hash值,以此确定插入数组中的位置,但是可能存在同一hash值的元素已经被放在数组同一位置了,这时就添加到同一hash值的元素的后面,他们在数组的同一位置,但是形成了链表,同一各链表上的Hash值是相同的,所以说数组存放的是链表。而当链表长度太长时,链表就转换为红黑树,这样大大提高了查找的效率。
负载因子
HashMap所能容纳的最大数据量=length*负载因子(默认是0.75)
超过这个数目就要进行扩容(resize),扩容后的HashMap容量是之前容量的两倍。
负载因子越大密度越大,发生碰撞的几率越高,数组中的链表越容易长,造成查询或插入时的比较次数增多,性能会下降。
负载因子越小,就越容易触发扩容,数据密度也越小,意味着发生碰撞的几率越小,数组中的链表也就越短,查询和插入时比较的次数也越小,性能会更高。但是会浪费一定的内容空间。而且经常扩容也会影响性能,建议初始化预设大一点的空间。
按照其他语言的参考及研究经验,会考虑将负载因子设置为0.7~0.75,此时平均检索长度接近于常数。
HashMap 的长度为什么是2的幂次方
因为hash值很大,不能拿来直接用来做数组下标。所以令table数组下标i = (length-1)&hash,length-1后就能保证全为1,与操作之后,能保证散列的均匀,同时与运算效率高。
迭代器
迭代器是一个对象,他的工作是遍历并选择序列中的对象。开发人员不需要知道容器底层结构,就可以实现对容器的遍历。
Iterator只能正向遍历集合,ListIterato继承自Iterator,专门针对List,可以从两个方向来遍历List,同时支持元素修改。
Collection和Collections
Collection是集合类的上级接口,继承与他有关的接口主要有List和Set
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全等操作

浙公网安备 33010602011771号