- Map<K,V>特点
a.存储的是键-值对的对象(Entry)
b.键不可以重复,值可以重复
c.K、V类型不能为基本数据类型
d.不能使用iterator来进行遍历,不是Iterable的子接口 - HashMap
HashMap是基于哈希表的map的实现,允许使用null键和null值
无序(存入取出顺序可能不相同),key不可重复,value可以重复 - 哈希表
哈希表(Hash table,也叫散列表),是根据关键码值直接进行访问的数据结构。也就是说,它通过一个映射函数把关键码的值(hashcode值)映射到表中一个位置来进行访问,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组(数组链表二叉树)叫做散列表。 - Hash判定元素是否相同
1.判断两个元素的哈希值(hashCode())是否相同
2.如果哈希值相同,再判断两个对象的内容(equals方法)是否相同 - 如果哈希值不同,就不需要判断内容是否相同
注意:
① 如果存入HashMap的key的hashCode值相同和equals方法为true,说明两个key为同一个,重复。
② 向hashmap中存入数据时,如果key一样(hashcode和equals),key不变,新存入的value值会覆盖原来的value值。如果key不一样,则正常存入。
③ hash冲突问题:当存入的key不重复的时候,通过散列函数计算出来的数组下标可能会有重复,例如 33%16 = 1 49%16=1 ,这种情况称之为hash冲突。会将数据以链表和二叉树的方式连接在数组对应的下标处 - HashMap的使用
- map的存入
2)map的遍历
map不能直接遍历,需要先转换成set再进行遍历
- HashMap的应用:统计次数等
有一系列字符串,统计每个字符串出现的次数 - hashmap的底层
当存入的个数>容量0.75时,就会扩容
初始容量是16,当存放的个数达到12的时候,Entry数组就会扩容
162=32 12*2 = 24
8. TreeMap
使用红黑树(二叉树的一种)数据结构存储数据的map接口
Key不能重复,value可以重复
Key不能为null
存入时需要根据key进行比较确定存放的位置,需要定义排序规则
9. 树结构
① 树结构
② 二叉树
③ 红黑树
红黑树是一种自平衡排序二叉树,树中每个节点的值,都大于在它的左子树中的所有节点的值,并且小于在它的右子树中的所有节点的值,这确保红黑树运行时可以快速地在树中查找和定位的所需节点。(为了维持平衡还可以左旋、右旋)
二叉树结构的遍历:(递归)
先序遍历:根节点“先”,根–>左–>右
中序遍历:根节点“中”,左–>根–>右
后序遍历:根节点“后”,左–>右–>根
- Tree结构的排序方法
1) 元素自身实现Comprable接口,让元素自身具备比较大小功能
2) 使用比较器(Comprator接口的实现类)
如果对象自身不具备比较大小的能力或不想按照对象中具备的排序规则为进行排序,那么就让集合自身具备比较功能。
注意:
Tree结构不能存储null(treemap里面的key),因为源码要调用存入对象的方法进行比较大小,会抛空指针异常,value可以为null
Tree结构数据(treemap里面的key)是否相同是根据重写的比较方法(compareTo)来判断,与hash无关
- TreeMap的应用
统计次数,并按照一定的顺序输出