集合目录详情,点击跳转

  • 为什么要使用集合
  • 集合的框架理解
  • 常见集合接口存储数据的特征:
  • 常见集合的使用和讲解
    • 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()
使用LinkedList集合时,他的元素添加方法与之前的ArrayList相同,
包括指定索引添加也是相同的语法

但同时需要注意的是如果在创建集合时定义了数据类型,那么就不能在集合内添加其他类型的数据了,否则就会报错

remove()
使用remove()通过索引删除元素时要注意,删除某个元素之后,元素后面的其他元素就会向前移动,这个移动与我们的数组和ArrayList集合还有些不同;

数组和ArrayList底层还是属于一个数组结构,那么在进行元素的添加删除,还是通过元素的移动进行的

而LinkedList集合的底层属于双向链表,在进行删除的时候,需要修改节点,那么我们假设LinkedList集合内部有三个元素,每个元素都有两个节点,且每个节点相互指引;

第一个元素的节点前为空值,代表链表的开始,后面的节点指向第二个元素的前一个节点,同样第二个元素的前一个节点也指向第一个元素的后节点,依次类推,就可以通过双向链表把元素链接起来,这里需要注意的时,最后一个元素的后一个节点指向空,因为它后面就没元素了,关于这个双向链表可以点击以下链接了解:

点击了解双向链表

双向链表还是很重要的,最好找一些技术文档好好学习一下

isEmpty()

ArrayList集合和LinkedList集合的区别:

下面了解一下,ArrayList集合和LinkedList集合的一些区别:

将ArrayList替换成LinkedList之后,有什么变化?

  • 底层的结构变了

    ArrayList:数组
    LinkedList:双向链表

  • 具体的执行过程变化了

    ArrayList:大量的后移元素
    LinkedList:不需要大量的移动元素,修改节点的指向即可

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

  • 运算结果没有变

  • 执行的功能代码没有变

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

  • 根据使用场合而定
  • 大量的根据索引查询的操作,大量的遍历操作(按照索引0–n-1逐个查询一般),建议使用ArrayList
  • 如果存在较多的添加、删除操作,建议使用LinkedList

LinkedList增加了哪些新的方法?

  • 增加了对添加、删除、获取首尾元素的方法
  • addFirst()、addLast()、removeFirst()、removeLast()、getFirst()、getLast()

Java中栈和队列的实现类

很多人都听说过jvm中栈内存和堆内存,但今天的重点不再这,想要了解这方面的,可以点击以下链接进行了解:
点击了解栈堆

其实在我们集合中有着栈和队列的实现类:

使用Stact创建栈的对象

push()添加元素

传入的参数也要压栈,就是将元素压到栈集合中

peek()添加集合中的栈顶元素

LinkedList实现队列结构

Deque双向队列

什么是双向队列?

队列与栈相反,栈的是先进后出
队列是先进先出


我还在继续编辑------
未完待续—

Java集合的所有知识点详解,偏通俗易懂,集合笔记相关推荐

  1. JAVA集合Set之HashSet详解_Java基础———集合之HashSet详解

    1.HashSet简介 Set是一个继承于Collection的接口,即Set也是集合中的一种.Set是没有重复元素的集合. HashSet是Set接口典型实现,它按照Hash算法来存储集合中的元素, ...

  2. 它来了,阿里架构师的“Java多线程+并发编程”知识点详解手册,限时分享

    自学Java的时候,多线程和并发这一块可以说是最难掌握的部分了,很多小伙伴表示需要一些易于学习和上手的资料. 所以今天这份「Java并发学习手册」就是一份集中学习多线程和并发的手册,PDF版,由Red ...

  3. java中流_Java中流的有关知识点详解

    Java中流的有关知识点详解 发布时间:2020-09-17 03:50:59 来源:脚本之家 阅读:103 作者:mumu1998 什么是流? 流:程序和设备之间连接起来的一根用于数据传输的管道,流 ...

  4. (7)Java数据结构--集合map,set,list详解

    MAP,SET,LIST,等JAVA中集合解析(了解) - clam_clam的专栏 - CSDN博---有颜色, http://blog.csdn.net/clam_clam/article/det ...

  5. java集合框架的结构_集合框架(Collections Framework)详解及代码示例

    简介 集合和数组的区别: 数组存储基础数据类型,且每一个数组都只能存储一种数据类型的数据,空间不可变. 集合存储对象,一个集合中可以存储多种类型的对象.空间可变. 严格地说,集合是存储对象的引用,每个 ...

  6. 40000+字超强总结?阿里P8把Java全栈知识体系详解整理成这份PDF

    40000 +字长文总结,已将此文整理成PDF文档了,需要的见文后下载获取方式. 全栈知识体系总览 Java入门与进阶面向对象与Java基础 Java 基础 - 面向对象 Java 基础 - 知识点 ...

  7. java中的进制输出转换_Java I/O : Java中的进制详解

    作者:李强强 上一篇,泥瓦匠基础地讲了下Java I/O : Bit Operation 位运算.这一讲,泥瓦匠带你走进Java中的进制详解. 一.引子 在Java世界里,99%的工作都是处理这高层. ...

  8. 《Java和Android开发实战详解》——2.5节良好的Java程序代码编写风格

    本节书摘来自异步社区<Java和Android开发实战详解>一书中的第2章,第2.5节良好的Java程序代码编写风格,作者 陈会安,更多章节内容可以访问云栖社区"异步社区&quo ...

  9. java中Freemarker list指令详解

    java Freemarker中list指令主要是进行迭代服务器端传递过来的List集合. 定义 <#list nameList as names> ${names} </#list ...

  10. 《Java和Android开发实战详解》——1.2节Java基础知识

    本节书摘来自异步社区<Java和Android开发实战详解>一书中的第1章,第1.2节Java基础知识,作者 陈会安,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

最新文章

  1. AI工程师面试知识点:机器学习算法类
  2. Linux下的grep命令详解
  3. 关于ssh 配置文件的参数说明
  4. 构建之法阅读心得(二)
  5. 美国教育---一切为了学生的成才
  6. python 编程语言排行榜_2019年6月编程语言排行榜:Python 排名飙升,三年内有望超越Java...
  7. 2018电工杯数学建模A题
  8. 3300字详解闲鱼上如何找到爆款品类?
  9. 自己动手XP集成SP3补丁
  10. 图像/视频无损放大,用一个工具就够了
  11. Revisiting Pixel-Wise Supervision for Face Anti-Spoofing
  12. 二重积分x^2+y^2_计算二重积分∫∫(x^2+y^2+x)dxdy,其中D为区域x^2+y^2=1
  13. Teamvier提示商业用途限制使用的解决方案
  14. 找回密码功能 java_Java实现邮件找回密码功能
  15. Unity Windows PC获得唯一标识符
  16. 百度地图整合离线和使用
  17. python 自动点赞_python实现在有漏洞的网站实现自动注册、登录、点赞
  18. 《Linux C编程从入门到精通》——第 1 章 Linux基础 1.1Linux的起源、发展和分类...
  19. 如何生成和使用CLIPS动态链接库
  20. c语言n阶方阵,如何用C语言编出一个N阶螺旋方阵?

热门文章

  1. 【精品分享】决定边缘计算未来形态的五大需求
  2. 【数据预测】基于matlab双向长短时记忆BiLSTM(多输入单输出)数据预测【含Matlab源码 1826期】
  3. 【人脸识别】基于matlab GUI PCA算法人脸识别门禁系统【含Matlab源码 1777期】
  4. 【车间调度】基于matlab鸟群算法求解车间调度问题【含Matlab源码 1395期】
  5. 【背包问题】基于matlab遗传算法求解背包问题【含Matlab源码 578期】
  6. 【语音合成】基于matlab线性预测系数和基音参数语音合成【含Matlab源码 563期】
  7. 坦克位置伺服系统分析与设计_伺服电机噪音及不稳定分析
  8. 是你渡过人生难关的助力_人工智能将助力安全返回工作场所。 这是如何做
  9. 深度学习 检测异常_深度学习用于异常检测:全面调查
  10. 在服务中mysql启动不了了_mysql在服务项里无法启动