Map知识及HashMap源码分析
Map
特点:key-value关系映射(相当于给某一个值添加了索引),类似存储数据的还有session、redis、json等。
HashMap:
特点:key(无序,唯一)、value(无序,不唯一)。HashMap底层的实现是哈希表。
在哈希表中取出一个key值,会进行模运算,取模的模数是根据数组长度决定的。
例:在上图中数组长度为8,对key值取模运算之后得到一个0~7的数值,会根据数值存入相对应的内存空间中,若取模数值相同,则通过链表进行相连存储。
在jdk1.7时的存储结构为数组+链表;在jdk1.8后采用数组+链表+红黑树 的结构。
LinkedHashMap
特点:采用链表的数据结构,查询速度快。
TreeMap(红黑树)
特点:采用红黑树的数据结构,有序,但是没有hash快。
Set与Map有关系吗?
Map里面对应的key值就是一个Set集合。
Map中API操作:
增加:put(key,value)
查找:isEmpty(判断数组是否为空)、size(返回map的大小)、containsKey(是否包含对应的key值)、containsValue(判断是否包含对应的value值)、get(查找是否包含对应的元素,这里传入key值,找到value)
删除:clear(清空集合中的全部属性值)、remove(删除指定元素)
遍历:
HashMap和HashTable的区别:
1.HashMap线程不安全,效率较高;HashTable线程安全,效率较低。
2.HashMap中key和value都可以为空,HashTable中不允许为空。
HashMap中的重要知识点:
头插法:
总结: