# java201904015 **Repository Path**: GUOSD/java201904015 ## Basic Information - **Project Name**: java201904015 - **Description**: 集合 - **Primary Language**: Java - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-04-15 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # java201904015 #### 介绍 集合 #### 笔记 1.Map接口 、、、、、、 1.1Map接口 Map中存放的是键值对;键值对是由key-value构成; Map中是使用Hash函数对对键值对中的key进行Hash散列存储; Map是可以自动扩容的,出始长度为16,负载因子为0.75; Map中使用一个名字为Entry的内部类对键值对进行抽象封装;也就是,相当于先试用entry对键值对进行抽象封装,然后再将entry键值对放入HashMap进行管理; Map在使用时还是直接对键值对进行操作,此时entry是透明的; Map可以类比HashSet的用法,只不过HashMap是对键值对中的Key进行的管理;Value是伴随Key值存在的; Map接口提供了通过key获取value的行为方法;该行为是有get方法实现的; Map接口的常用实现类: HashMap、LinkedHashMap、TreeMap等 Map接口的遍历一般是转化为对keyset集合或者是entryset集合的遍历; 1.2HashMap实现类 HashMap是使用数组为基础的线性表进行存储(数组为基础+链表+红黑树(1.8+))进行存储的,对键值对中的Key进行散列存储; HashMap采用对Key的算列存储,所有不能够通过下标的方式进行遍历;但是可以使用get方法通过key获取value值; HashMap实现类的特性: key是否有序? 无序(存入顺序和取出顺序不一致) key是否重复? 不能重复 key是否可以为null值; 可以 key是否排序? 不排序 1.3 LinkedHashMap实现类 LinkedHashMap实现类底层采用双向链表储的线性结构;底层采用双向链表进行存储; LinkedHashMap实现类的特性: key是否有序?有序(存入顺序和取出顺序一致) key是否重复? 不能重复 key是否可以为null值; 可以 key是否排序? 不排序 1.4 TreeMap实现类 TreeMap实现类底层使用红黑树树型结构; TreeMap实现类的特性: key是否有序?无序(存入顺序和取出顺序不一致) key是否重复? 不能重复 key是否可以为null值; 不可以 key是否排序? 排序(按自然顺序排序或者根据创建 Map 时提供的 key的Comparator 进行排序) 1.5HashMap底层的扩容过程 深度的源码级别的解析一下HashMap进行的Map接口的操作,主要是put行为; HashMap底层采用线性表的方式进行存储,初始长度为16;加载因子为0.75; HashMap是自动扩容的; HashMap在1.8之前是数组+链表的形式进行存储;1.8+之后,是采用数组+链表+红黑树的形式进行存储; 扩展:面试重点★★★★★ HashMap底层存储的数据结构;(掌握) HashMap扩容的过程;(逐步掌握) ConcurrentMap扩容是的cas无锁化处理;(逐步掌握) HashMap中put操作时,链表向红黑树的转化算法;(逐步掌握) 、、、、、、 2.Comparable和Compartor接口 、、、、 2.1 Comparable接口 Comparable是实现比较行为的结构,如果继承类该类,则继承类具有比较的行为能力; 已经实现的类有:8中基本类型的包装类、String类; 用户自定义的类没有实现该接口,如果需要该类具有比较行为能力,则需要实现该Comparable接口; TreeSet和TreeMap要求存入的元素对象实现Comparable接口或者提供一个实现Comparator接口的比较器; 2.2 Comparator接口 Comparator是通过实现类的方式为其他类提供一个比较器对象,用于该类对象的两个元素之间进行比较; Comparator是单独提供一个比较器,Comparable是该类实现比较行为; 3. xxxx #### 使用说明 1. xxxx 2. xxxx 3. xxxx #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)