2024年Java最全Java集合的所有知识点详解,偏通俗易懂,集合笔记(1),初面蚂蚁金服

最后

由于细节内容实在太多了,为了不影响文章的观赏性,只截出了一部分知识点大致的介绍一下,每个小节点里面都有更细化的内容!

小编准备了一份Java进阶学习路线图(Xmind)以及来年金三银四必备的一份《Java面试必备指南》

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

    • list集合
    • ArrayList集合
  • ArrayList集合的部分方法展示

  • 理解ArrayList集合源码

  • LinkedList的使用

  • ArrayList集合和LinkedList集合的区别:

    • 将ArrayList替换成LinkedList之后,有什么变化?
  • 将ArrayList替换成LinkedList之后,哪些没有发生变化?

  • 在实际开发过程中,到底是使用ArrayList还是LinkedList?

  • LinkedList增加了哪些新的方法?

  • Java中栈和队列的实现类

    • 使用Stact创建栈的对象
    • push()添加元素
  • peek()添加集合中的栈顶元素

  • LinkedList实现队列结构

    • Deque双向队列

为什么要使用集合

=======================================================================

在学习集合之前,我们了解过数组,那么我们可以用数组来存储数据,为什么还要用集合呢?其中可以通过几点概括:

我们先来里了解数据于聚合的区别:

在这里插入图片描述

| | |

| — | — |

简单来讲,数组是一列相同类型的数据储存的空间,我们在初始化数组时需要初始化数组的长度,这样对数据的添加和删除比较麻烦,然后我们在往里面添加数据,每个数据在数组中,都有自己的下标,查找数据比较容易;

但是我们想存储一些连贯的信息,比如我们的个人信息,其中包括名字,年龄、家庭住址、证号,那总不能创建好多个数组,然后一个一个遍历?于是集合就出现了

集合就是一堆数据,其中可以包括不同类型的数据,比如名字、年龄可以存在一起;

集合内部只能存储对象,名字和int类型的年龄在存储时都会自动包装成对象

具体详情可以点击点解了解:什么是集合

| | |

| — | — |

集合的框架理解

======================================================================

我们上面说过,集合可以存储多种类型的数据,但其实存储的都是相应的对象罢了,我们可以把它理解成可以存储对象的容器;

在集合中,jdk为了我们便于操作数据,提供了一系列框架,在框架中,里面有很多类和接口,我们用的时候,直接调用就可以实现相应的功能,它们都是位于java.util包中;

另外存储在集合中的 数据,也可以被称为元素,这个你们记住就好,当然也可以说是数据,元素是公认的 规范,最好 说元素;

在这里插入图片描述

我们可以看上面这张图片,上面就是集合容器框架中各个接口的关系,其中collection接口、map接口、Iterator接口他们之间呢,都是相互依赖的关系,还有就是常用的list接口和set接口,都是继承了collection接口;

| | |

| — | — |

常见集合接口存储数据的特征:

=============================================================================

  1. Collection 接口存储一组不唯一,无序的对象

  2. List 接口存储一组不唯一,有序(索引顺序)的对象

  3. Set 接口存储一组唯一,无序的对象

  4. Map接口存储一组键值对象,提供key到value的映射

Key 唯一 无序

value 不唯一 无序

在这里做个引入,具体的后面,会有代码和注释详细讲解每个接口的使用和实现功能

常见集合的使用和讲解

=========================================================================

list集合


List接口继承Collection接口,实现了List接口的类称为List集合;

List集合的主要实现类有:

ArrayList和LinkedList,分别是数据结构中顺序表和链表的实现

另外还包括栈和队列的实现类:Deque和Queue

list集合储存数据的条件是:不唯一,有序(索引顺序)的对象,

有序:

比如我们创建了集合,在集合内写入[“张三”,12,99,“李四”]这一列数据,那么我们在最后遍历输出之后,他依然会按照这个顺序输出出来,那么这个就是有序;

不唯一:

就像我们定义了这样一个集合[“张三”,12,99,99,“李四”],那么在遍历时每一个99都会存储在内存中,保证了元素的不唯一性

ArrayList集合

ArrayList属于list的实现类;

他与数据存储结构与数组类似,都是在内存中分配连续的空间,只不过相对于数组,他是长度可变的数组

其中它因为自身的数据存储结构,可以通过索引实现它的遍历元素和查找元素速度很快;

但元素的添加和删除都需要大量的移动数组,效率比较低;

你们可以点击链接了解什么是数组,就可以知道ArrayList实现类与数组在特征上比较相似;

数组的特征

ArrayList集合的部分方法展示

add()

这里要注意几点:

1、使用add添加的数字,是通过自动装箱的结果,集合内存储的是对象!

2、通过索引向指定位置添加索引,如果指定位置有其他元素,那么他会自动往后移;

3、如果指定索引超出了集合的原来的索引范围,比如在下面代码把4改成8,那么就会报错,索引越界

在这里插入图片描述

addAll()

addAll()可以让两个集合拼接在一起,没有指定索引,则会添加倒最后一位

如果指定了索引,则括号内的集合的元素从索引处依次添加,原集合的元素,会整体往后移;

在这里插入图片描述

遍历:

我们直接使用System.out.println(list);也可以将数组内的数据显示出来,但是它也仅仅是让llist中的集合暂时显示出来。

想要对里面的元素做一些操作,还是需要将他们从变量中遍历出来

可以使用for,增强for循环

在使用的时候,需要注意,遍历出的元素需要拆箱才可以;

关于foreach遍历时要用Object进行接收,因为这个属于单个元素进行遍历,遍历出来的时候还是一个集合对象 这点要注意下,也可以点击链接了解一下Object

Object的了解

在这里插入图片描述

Iterator迭代器

也可以使用Iterator迭代器进行集合的遍历;

前面再使用Iterator时,需要用Iterator修饰的变量来接受元素

在这里插入图片描述

关于集合的其他方法:

在这里插入图片描述在这里插入图片描述

| | |

| — | — |

理解ArrayList集合源码

ArrayList底层就是一个长度可以动态增长的Object数组,

我们可以通过源码的得知:

在这里插入图片描述

ArrayList他的初始容量为10,但是这里要清楚一个状况,我们只是单单创建了一个集合对象,并不代表这个对象有了初始值;

在这里插入图片描述

此时他的初始容量还是0;

当我们使用add添加元素之后,才会分配相应的你内存空间,初始容量为10;

但如果我们存储的容量大于10了,那么ArrayList集合就会扩容,

扩容增量:原容量的 0.5倍

如 ArrayList的容量为10,一次扩容后是容量为15,如果扩容了0.5倍后,还不能容纳一次传入的元素,那么就会扩容到可容纳元素的最小容量;

关于源码的理解,可以点击链接了解详情:

集合源码的理解

| | |

| — | — |

LinkedList的使用


add()

最后

Java架构学习技术内容包含有:Spring,Dubbo,MyBatis, RPC, 源码分析,高并发、高性能、分布式,性能优化,微服务 高级架构开发等等。

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
在这里插入图片描述

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

并发、高性能、分布式,性能优化,微服务 高级架构开发等等。

还有Java核心知识点+全套架构师学习资料和视频+一线大厂面试宝典+面试简历模板可以领取+阿里美团网易腾讯小米爱奇艺快手哔哩哔哩面试题+Spring源码合集+Java架构实战电子书+2021年最新大厂面试题。
[外链图片转存中…(img-11T7dqzg-1714863506426)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值