Map接口
- 成对的对象(两个对象 ) 才能作为一个 集合元素对象,一对才算一个,Key(主键):Value(值)
- Map的Key对象是不可重复的
- key对象(是具有唯一性的 能唯一地代表某个value对象的对象 才能作为主键)例如 单车的id 人的id 学生的id
Map的实现类
HashMap
- 哈希值 hashCode方法返回对象的哈希值,哈希值能唯一得代表某个对象,就好像对象的身份证号码一样;不同的对象拥有不同的哈希值;哈希算法,通过哈希算法得到的值 称之为哈希值;数据压缩算法,把一个无限范围内的数据压缩到一个有限范围内 ;抽屉原理:10个苹果 9个抽屉 100个苹果尽量分散在9个抽屉中(0-8),如果不同的苹果经过哈希算法得到了同一个值 也就是说要放 同一个抽屉中称这种情况是 哈希冲突;哈希冲突是解决不了的 只能尽量避免;
- HashMap 源码内部用到了哈希算法 所以名称中也带有hash;
- HashMap底层是哈希表(别名:字典表,映射表;哈希表由 数组+单向链表 结合而成的一种数据结构 把数组和链表的优点结合到一块 );从JDK8开始哈希表 是由 数组+单向链表+红黑树 组成的;
- HashMap在JDK引入红黑树的目的是为了提升单向链表的查询性能;
LinkedHashMap
- LinkedHashMap是HashMap的子类
- 底层是哈希表(数组+单向链表+红黑树)的基础上 又加了一个双向链表,为了维持元素的添加顺序;
TreeMap
- TreeMap的底层是红黑树(二叉排序树)要根据Key对象进行排序;
- TreeMap的Key类型必须是可以比较大小的类型,Key类型要么实现Comparable接口,要么在TreeMap构造器中提供比较器
Hashtable
- Hashtable 底层也是哈希表(数组+链表)
- Hashtable是线程安全的Map; HashMap,LinkedHasMap TreeMap线程都不安全
- Hashtable性能过低的,在多线程高并发项目中已经不适用了,ConcurrentHashMap适用于多线程高并发项目中,性能较高;
Map使用注意
1,Key的选型,Key对象使用的是具有唯一性的对象 能唯一地代表某个value对象;
Key的类型一般使用不可变类型,常使用String Integer ,因为String和Integer都是不可变的类型
标签:Map,Java,哈希,对象,链表,Key,集合,HashMap From: https://www.cnblogs.com/jh0129/p/17220322.html