# java20190412 **Repository Path**: GUOSD/java20190412 ## Basic Information - **Project Name**: java20190412 - **Description**: 集合 - **Primary Language**: Java - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-04-12 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # java20190412 #### 介绍 集合 #### 软件架构 软件架构说明 #### 安装教程 1.集合概念 1.1 集合概念 集合就是一组数据的组合体,具有相同操作行为(操作行为一般使用接口来进行定义【面向接口的编程】) java中提供的集合有:Collection接口和map接口规范; java使用接口规范定义某一类集合的特征行为能力;一个接口会有多种实现方式,结合数据结构,一般会采用 线性表(数组)、链式结构(链表)、树型结构(二叉树) 1.2 Collection接口集合 Collection是一种常用的集合接口规范; Collection接口下面常用的子接口有:List接口、Set接口、Queue接口 课程中重点讲解:List和Set接口; Collection接口的特征: Collection集合中的元素都必须是对象类型; Collection集合支持多态(父类指代子类),所有集合中的元素的类型不一定都一样;但是他们都必须是Object类的子类; Collection集合对比数组: 集合元素类型不一定一样,只要是对象类型即可;(支持多态) 数组元素类型必须一致,数组可以是基本类和对象类型;(多支持多态) 集合元素存储位置不一定需要连续; 数组元素存储位置必须连续; 集合长度可以动态扩展; 数组长度不能动态扩展; 学习Collection集合从以下几个方面进行比较: 是否有序?(有序:存入集合时元素的顺序和取出集合元素时的顺序一致) 是否重复?(元素的值是否可以重复存储) 是否可以为null值;(是否可以存储null) 是否排序?(排序:取出元素时会按照自然顺序进行排序) 注意:不同集合的实现子类对于上述四个特征的区别主要来自于底层采用的存储方式的不同造成的; 底层的存储方式(线性表、链表、树)会影响实现类的特性; 2、Set接口集合 2.1 Set接口是Collection接口一个子接口 Set接口常用的实现类: HashSet类、LinkedHashSet类、TreeSet类 2.2 HashSet实现类 HashSet实现类底层采用Hash散列存储的线性结构;底层采用HashMap线性表进行存储; Hash散列存储是采用Hash散列算法进行存储的一种方式; Hash算法: 是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。 这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来确定唯一的输入值。 简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。 HashSet实现类的特性: 是否有序? 无序(存入顺序和取出顺序不一致) 是否重复? 不能重复 是否可以为null值; 可以 是否排序? 不排序 2.3 LinkedHashSet实现类 LinkedHashSet实现类底层采用双向链表储的线性结构;底层采用双向链表进行存储; LinkedHashSet实现类的特性: 是否有序?有序(存入顺序和取出顺序一致) 是否重复? 不能重复 是否可以为null值; 可以 是否排序? 不排序 2.4 TreeSet实现类 TreeSet实现类底层使用红黑树的TreeMap的树型结构; LinkedHashSet实现类的特性: 是否有序?无序(存入顺序和取出顺序不一致) 是否重复? 不能重复 是否可以为null值; 不可以 是否排序? 排序(按自然顺序排序或者根据创建 set 时提供的 Comparator 进行排序) 课堂扩展: 创建一个Student类,能否将Student类的实例对象存入HashSet、LinkedHashSet、TreeSet中? String类的实例对象呢? 3、List接口 3.1 List接口概念 List接口是一种顺序存储的集合; List是Collection接口的子接口,并自行扩展了新的行为方法; List中常用的实现类: ArrayList子类、linkedList、Vactor 特性: 顺序存储;(有序) 可以使用下标遍历;(类似于数组) 可以含有重复的元素; 3.2 ArrayList实现类 ArrayList实现类底层使用数组线性表的结构进行存储; ArrayList实现类的特性: 是否有序?有序(存入顺序和取出顺序一致) 是否重复? 可以重复 是否可以为null值; 可以 是否排序? 不排序 3.2 LinkedList实现类 LinkedList实现类底层使用链表的结构进行存储; LinkedList实现类的特性: 是否有序?有序(存入顺序和取出顺序一致) 是否重复? 可以重复 是否可以为null值; 可以 是否排序? 不排序 3.3 ArrayList和LinkedList实现类的区分 相同点: 都实现了List的接口行为,行为特性一样; 不同点: 在于底层实现的数据结构不同;造成具有不同的特点; ArrayList是数组实现,数据操作时,增删慢,读取和赋值快; 当数据读取比较频繁时,优先使用; LinkedList是链表实现,数据操作时,增删快,读取和赋值慢; 当数据增删频繁时,优先使用; #### 使用说明 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/)