HashMap的底层原理
HashMap,是基于Hash表的Map接口的非同步实现,此实现提供所有可选映射,并且允许null值和null键。此类不保证存入数据的顺序,特别是他它不保证顺序的永恒不变。
在java中所有的数据结构的构造都可以用数组和模拟指针来实现(引用),HashMap也不例外,HashMap实际上是一个“散列表列”的数据结构,就是数组和列表。
当我们往HashMap 存入一个数据的时候,它会根据key的hashcode,计算hash值,根据hash值拿到这个数据的下标,如果该下标已经存在值,那么这个位置会议链表形式存放,最先进加入的会存在链尾,新加入的存在于链头,如果该位置没有数据,则会直接存入
需要关注的一点是,在jdk8之后,对HashMap做了一个优化,当链表存储数据超过八个,该链表会转为红黑树来提高查询的速度,从源来的O(n)到O(logn)
HashSet的的底层原理