回炉重造java----单列集合(List,Set)

体系结构 : 集合主要分为两种,单列集合collection 和双列集合**Map,**区别在于单列集合一次插入一条数据,而双列的一次插入类似于key-value的形式

单列集合collection

注:红色的表示是接口,蓝色的是实现类

①操作功能:

增加: add(),List的新增一定是成功的,而Set不一定因为其有不能重复的限制条件

清空:clear()

删除:remove(),因为collection中定义的是共性的方法,所以删除不能通过索引去删除

判断是否存在:contains(),其底层是通过equals()方法实现的,因为equals()方法是基于比较地址值,所以如果集合中存的是对象的话,要重写equals()方法才能进行contains的比较

判断是否为空:isEmpty()

返回集合大小:size()

②遍历方式:

集合的遍历方式有三种,分别是迭代器遍历,增强for遍历和lambda表达式遍历

**迭代器(Iterator)遍历:**创建Iterator对象进行遍历

注: 迭代完毕指针不会复位;循环中next()只能用一次;迭代过程中不允许使用集合的方法增加删除

**增强for遍历:**底层其实就是迭代器

注: 集合名.for快速生成;对s中的修改不对集合的原数据有影响

**Lambda表达式(foreach)遍历:**底层就是遍历集合通过accept方法依次过的元素

③List

注: remove的时候如果有方法重载了,优先调用形参和实参类型一样的方法。remove(1)是索引

**遍历方式:**相比于collection的3种遍历方式,List当然全部继承了,但是因为List有了索引的机制,所以List还增加了两种,普通的for循环和列表迭代器(listIterator)

数据结构:

ArrayList详解:底层是数组

源码:

①创建ArrayList时是一个长度为0的elementData

②在插入第一个元素时,将扩容为长度为10的数组,然后把数据放进去

①当原数组的长度已经用完了,底层就要去扩容,默认是扩容原数组长度的一半,即1.5倍

②如果插入的数据长度很大,就会扩容到大长度的地方

LinkedList详解:底层是双向链表

注: 这里的方法基本不用,而是基本使用List的方法

源码:学了数据结构中的双向链表就可以清楚的知道其操作流程

④Set

泛型:

泛型的作用:

java中的泛型其实是伪泛型:即其实底层存的时候依然是object对象,泛型会擦除

泛型可以定义在类上,也可以定义在方法上,还可以定义在接口上

HashSet详解: 底层是哈希表,jdk8之前是数组+链表,jdk8之后是数组+链表+红黑树

**存数据的过程:**①由hashcode计算出应存入的位置②如果位置是空就放进去③如果不为空,则调用equals方法去判断是否一样的,如果一样的就不存④如果不一样的话,jdk8之前是把新元素放进去,老元素取出来挂在新元素后面,而jdk8之后就是直接把新元素挂在老元素的后面

注意点:

LinkedHashSet详解: 底层跟HashSet一样,不过在其基础上加上了数据之间的双向链表结构,使得其变成有序的

TreeSet详解: 底层是红黑树,性能好

总结:各种单列集合的应用场景:

相关推荐
天天扭码1 分钟前
五天SpringCloud计划——DAY2之单体架构和微服务架构的选择和转换原则
java·spring cloud·微服务·架构
程序猿进阶2 分钟前
堆外内存泄露排查经历
java·jvm·后端·面试·性能优化·oom·内存泄露
FIN技术铺7 分钟前
Spring Boot框架Starter组件整理
java·spring boot·后端
zwjapple13 分钟前
typescript里面正则的使用
开发语言·javascript·正则表达式
小五Five14 分钟前
TypeScript项目中Axios的封装
开发语言·前端·javascript
小曲程序14 分钟前
vue3 封装request请求
java·前端·typescript·vue
前端每日三省16 分钟前
面试题-TS(八):什么是装饰器(decorators)?如何在 TypeScript 中使用它们?
开发语言·前端·javascript
凡人的AI工具箱29 分钟前
15分钟学 Go 第 60 天 :综合项目展示 - 构建微服务电商平台(完整示例25000字)
开发语言·后端·微服务·架构·golang
陈王卜31 分钟前
django+boostrap实现发布博客权限控制
java·前端·django
小码的头发丝、32 分钟前
Spring Boot 注解
java·spring boot