java重点学习-集合(List)

embedded/2024/12/22 13:21:40/

七 集合(List)

7.1 复杂度分析

7.2 数组

1.数组(Array)是一种用连续的内存空间存储相同数据类型

数据的线性数据结构

2.数组下标为什么从0开始

寻址公式是:baseAddress+i*dataTypeSize,计算下标的内存地址效率较高

3.查找的时间复杂度
  • 随机(通过下标)查询的时间复杂度是O(1)
  • 查找元素(未知下标)的时间复杂度是O(n)
  • 查找元素(未知下标但排序)通过二分查找的时间复杂度是O(logn)
4.插入和删除时间复杂度

插入和删除的时候,为了保证数组的内存连续性,需要挪动数组元素,平均时间复杂度为O(n)

7.3 ArrayList 底层实现

7.4 ArrayList底层的实现原理是什么

  • ArrayList底层是用动态的数组实现的
  • ArrayList初始容量为0,当第一次添加数据的时候才会初始化容量为10
  • ArrayList在进行扩容的时候是原来容量的1.5倍,每次扩容都需要拷贝数组
  • ArrayList在添加数据的时候
    • 确保数组已使用长度(size)加1之后足够存下下一个数据
    • 计算数组的容量,如果当前数组已使用长度+1后的大于当前的数组长度,则调用grow方法扩容(原来的1.5倍)
    • 确保新增的数据有地方存储之后,则将新元素添加到位于size的位置上。
    • 返回添加成功布尔值。

7.5 ArrayList list=new ArrayList(10)中的list扩容几次

7.6 如何实现数组和list之间的转换

  • 数组转List ,使用JDK中java.util.Arrays工具类的asList方法
  • List转数组,使用List的toArray方法。无参toArray方法返回Object数组,传入初始化长度的数组对象,返回该对象数组

7.7 ArrayList 和 LinkedList 的区别是什么?

7.7.1单向链表
  • 链表中的每一个元素称之为结点(Node)
  • 物理存储单元上,非连续、非顺序的存储结构
  • 单向链表:每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。记录下个结点地址的指针叫作后继指针 next

7.7.2 双向连表


http://www.ppmy.cn/embedded/112097.html

相关文章

ClickHouse总结

背景 OLAP(联机分析处理) 是一种用于在大规模数据集上进行复杂分析的数据处理方法。与OLTP(联机事务处理)系统专注于支持日常业务交易和操作不同,OLAP系统旨在提供对多维数据的快速、灵活的查询和分析能力。 OLAP场景…

上门按摩小程序APP系统源码开发搭建

上门按摩系统开发是一个综合性的项目,旨在创建一个便捷、高效的平台,连接按摩师和客户,提供上门按摩服务。以下是上门按摩系统开发的主要步骤和考虑因素: 1.需求分析 ‌功能需求‌:确定系统需要具备的功能&#xff0…

在Linux中安装FFmpeg

在Linux中安装FFmpeg有两种方法。 安装FFmpeg(方法一) 第一步,下载FFmpeg。 登录地址:John Van Sickle - FFmpeg Static Builds下载安装包ffmpeg-git-amd64-static.tar.xz。然后使用WinSCP将安装包上传到文件夹/usr/local/src中…

基于STM32设计的智能家庭防盗系统(华为云IOT)(224)

文章目录 一、前言1.1 项目介绍【1】项目背景【2】项目实现的功能【3】项目硬件模块组成1.2 设计思路【1】整体设计思路【2】整体构架【3】上位机开发思路1.3 项目开发背景【1】选题的意义【2】可行性分析【3】参考文献【4】摘要1.4 开发工具的选择【1】设备端开发【2】上位机开…

「OC」事件点击demo合集

「OC」事件点击demo合集 文章目录 「OC」事件点击demo合集前言可用鼠标移动的UIview突出的tabBar按钮扩大按钮的响应范围 前言 在前面通过学习事件响应流程,学习了许多新的内容,当然也学习了许多不同的用法,但在之前的文章之中并没有将运用到…

PHP全程可视化防伪溯源一体化管理系统小程序源码

全程可视化,防伪溯源新篇章 —— 揭秘一体化管理系统的力量 🔍 开篇:透视未来,从源头到终端的安心之旅 在这个信息透明化时代,每一件商品都承载着消费者的信任与期待。而“全程可视化防伪溯源一体化管理系统”&#x…

opencv之傅里叶变换

文章目录 前言理论基础Numpy实现傅里叶变换实现傅里叶变换实现逆傅里叶变换 高通滤波示例OpenCV实现傅里叶变换实现傅里叶变换实现逆傅里叶变换 低通滤波示例 前言 图像处理一般分为空间域处理和频率域处理。 空间域处理是直接对图像内的像素进行处理。空间域处理主要划分为灰…

mybatis获取参数的5种情况

Mybatis获取参数值的两种方式 mybatis获取参数值的方式有两种: ${} 和 #{} ${} 这个的本质就是字符串拼接 这个无法避免sql注入攻击 #{} 这个的本质就是占位符(尽量使用 #{} 的方式) 可以避免sql注入 mybatis获取参数值的情况 1.mapper接口方法的参数为单个字面量类型…