顺序表+ArrayList

文章目录

  • 一、基础知识
    • 1.1 数据结构类的继承图
    • 1.2 List 介绍
    • 1.3 线性表
  • 二、数据结构 -- 顺序表
    • 2.1 什么是顺序表以及优缺点
    • 2.2 用数组实现顺序表
      • 细节解析
      • 代码
  • 三、ArrayList
    • 3.1 Java中如何使用ArrayList
    • 3.2 ArrayList源码
      • 无参构造方法
      • add方法
      • 扩容方法
      • 指定初始容量构造
      • 利用其他 Collection 构建 ArrayList
    • 3.3 ArrayList方法介绍
    • 3.4 ArrayList的遍历

一、基础知识

1.1 数据结构类的继承图

在这里插入图片描述

1.2 List 介绍

在这里插入图片描述

1.3 线性表

  1. 概念:n个具有相同特性的数据元素的有限序列
    • 常见的线性表:顺序表、链表、栈、队列…
      • 二叉树是棵树,不是线性表
    • 线性表的结构
      • 逻辑结构:在逻辑上是线性结构,在物理结构(内存)上并不一定是连续的
        • 对于顺序表来说,逻辑上和物理上都是连续的,其底层是数组
        • 对于链表来说,逻辑上是连续的,物理上则是不连续的
      • 存储形式:线性表在物理上存储时,通常以数组和链式结构的形式存储

二、数据结构 – 顺序表

2.1 什么是顺序表以及优缺点

  1. 概念:用一段物理地址连续的存储单元依次存储数据元素的线性结构,是个数据结构
  2. 实现方式:一般采用数组存储,链表也能实现
  3. 优缺点
    • 优点:查找和更新元素效率很高,为O(1)
    • 缺点
      • 每次【插入/删除】数据,都需要移动元素,极端情况下,如果插入到0下标,那么元素复杂度为O(n)
      • 当数组满了之后,会进行1.5倍扩容,但如果只是新增一个元素,这意味着会浪费大量空间
    • 缺点的解决方法:使用链表
  4. 使用场景: 适用于经常进行查找元素或者更新元素的场景下

2.2 用数组实现顺序表

细节解析

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

代码

public class SeqList {private int[] elem;private int usedSize;private static final int DEFAULT_CAPACITY = 5;public SeqList() {this.elem = new int[DEFAULT_CAPACITY];}// 打印顺序表,注意:该方法并不是顺序表中的方法,而是为了方便看测试结果给出的public void display() {for (int i = 0; i < this.usedSize; i++) {System.out.print(this.elem[i] +" ");}System.out.println();}// 新增元素,默认在数据 最后新增public void add(int data) {//首先得判断满的情况if(isFull()) {resize();}this.elem[usedSize] = data;usedSize++;}public boolean isFull() {return usedSize == elem.length;}// 判定是否包含某个元素public boolean contains(int toFind) {for (int i = 0; i < this.usedSize; i++) {if(elem[i] == toFind) {return true;}}return false;}// 查找某个元素对应的位置 下标public int indexOf(int toFind) {for (int i = 0; i < this.usedSize; i++) {if(elem[i] == toFind) {return i;}}return -1;}// 获取 pos 位置的元素public int get(int pos) {if(!checkPos(pos)) {//这个是自定义异常//此处不返回整型int,因为如果是一个数,可能会误认为pos位置的元素是该数throw new PosOutBoundsException("get 获取数据时,位置不合法!");}return elem[pos];}// 获取顺序表长度public int size() {return this.usedSize;}// 给 pos 位置的元素设为 value【更新的意思 】public void set(int pos, int value) {if(!checkPos(pos)) {//这个是自定义异常throw new PosOutBoundsException("set 数据时,位置不合法!");}this.elem[pos] = value;}private boolean checkPos(int pos) {if(pos < 0 || pos >= usedSize) {return false;}return true;}// 在 pos 位置新增元素public void add(int pos, int data) {if(pos < 0 || pos > this.usedSize) {//这个是自定义异常throw new PosOutBoundsException("add 元素的时候,pos位置不合法!");}if(isFull()) {resize();}//挪数据for (int i = this.usedSize-1; i >= pos ; i--) {this.elem[i+1] = this.elem[i];}//存数据this.elem[pos] = data;this.usedSize++;}private void resize() {elem = Arrays.copyOf(elem,2*elem.length);}//删除第一次出现的关键字keypublic void remove(int toRemove) {if(isEmpty()) {return;}int index = indexOf(toRemove);if(index == -1) {return;//没有你要删除的数字}for (int i = index; i < usedSize-1; i++) {this.elem[i] = this.elem[i+1];}usedSize--;//elem[us] = null;}public boolean isEmpty() {return usedSize == 0;}// 清空顺序表public void clear() {//方式一/*for (int i = 0; i < usedSize; i++) {this.elem[i] = null;}*/usedSize = 0;}}

三、ArrayList

3.1 Java中如何使用ArrayList

在这里插入图片描述

3.2 ArrayList源码

无参构造方法

在这里插入图片描述

add方法

在这里插入图片描述

扩容方法

在这里插入图片描述

指定初始容量构造

在这里插入图片描述

利用其他 Collection 构建 ArrayList

在这里插入图片描述

3.3 ArrayList方法介绍

在这里插入图片描述

3.4 ArrayList的遍历

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/10937.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【工具变量】排污权交易政策试点DID(2000-2023)

数据简介&#xff1a;在过去几十年间的“高增长、高能耗、高污染”的经济发展背景下&#xff0c;随着社会各界不断反应高经济增长背后付出的巨大环境代价&#xff0c;中国ZF将节能环保减排纳入长期规划治理中。在2007年&#xff0c;我国开始启动了二氧化硫&#xff08;SO2&…

通用特效Shader

一、通用特效Shader介绍 1.1 什么是通用特效材质 Unity支持SRP Batcher后&#xff0c;使用UberShader的优势非常明显。所谓&#xff0c;UberShader&#xff0c;即一个超级Shader&#xff0c;覆盖一类功能&#xff0c;而不是多个分散的小Shader&#xff0c;比如一个通用特效Sh…

网络安全SQL初步注入2

六.报错注入 mysql函数 updatexml(1,xpath语法,0) xpath语法常用concat拼接 例如: concat(07e,(查询语句),07e) select table_name from information_schema.tables limit 0,1 七.宽字节注入(如果后台数据库的编码为GBK) url编码:为了防止提交的数据和url中的一些有特殊意…

Golang--面向对象

Golang语言面向对象编程说明&#xff1a; Golang也支持面向对象编程(OOP)&#xff0c;但是和传统的面向对象编程有区别&#xff0c;并不是纯粹的面向对象语言。所以我们说Golang支持面向对象编程特性是比较准确的。Golang没有类(class)&#xff0c;Go语言的结构体(struct)和其…

英国留学论文写作中复合句式基础知识讲解

从句子的结构出发&#xff0c;复合句式是将两个以上的独立、完整的字句子通过coordinating conjunction或者分号连接在一起。因此&#xff0c;复合句式可以理解成为两个以上的简单句子组合在一起。下面英国翰思教育通过举例的方式&#xff0c;来介绍如何将独立的句子连接在一起…

从奇富科技,QQ钱包看信贷服务、贷款超市的的客户注册认证流程有什么不同

概览 奇富科技作为港股信贷第一企业&#xff0c;目前已服务2.4亿用户&#xff0c;是国内头部信贷科技服务平台。 QQ钱包&#xff0c;作为8亿用户的贷款超市&#xff0c;拥有其他贷款超市产品梦寐以求的流量入口。 产品模式 奇富科技作为信贷科技服务平台&#xff0c;主要提…

寻找伤感短视频素材 这些网站帮你轻松下载无水印资源

无论是制作情感类短视频&#xff0c;还是为抖音视频寻找合适的素材&#xff0c;伤感视频素材一直是创作者们关注的重点。如果你正在为如何找到高质量的伤感素材而困扰&#xff0c;那么今天我将推荐一些非常实用的素材网站&#xff0c;帮助你快速找到适合的伤感视频素材&#xf…

Java项目实战II基于Spring Boot的大学生智能消费记账系统的设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在当今社会…

Linux 抓包工具 --- tcpdump

序言 在传输层 Tcp 的学习中&#xff0c;我们了解了 三次握手和四次挥手 的概念&#xff0c;但是看了这么多篇文章&#xff0c;我们也只是停留在 纸上谈兵。  欲知事情如何&#xff0c;我们其实可以尝试去看一下具体的网络包的信息。在这篇文章中将向大家介绍&#xff0c;在 L…

基于Spring Boot+Vue的养老院管理系统【原创】

一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构&#xff1a;B/S架构 运行环境&#xff1a;win10/win11、jdk17 前端&#xff1a; 技术&#xff1a;框架Vue.js&#xff1b;UI库&#xff1a;ElementUI&#xff1b; 开发工具&…

基于SpringBoot+Vue音乐播放和推荐系统【提供源码+答辩PPT+参考文档+项目部署】

作者简介&#xff1a;✌CSDN新星计划导师、Java领域优质创作者、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行前辈交流。✌ 主要内容&#xff1a;&#x1f31f;Java项目、Python项目、前端项目、PHP、ASP.NET、人工智能…

震撼!通过双重异步,Excel 10万行数据导入从191秒优化到2秒!

震撼&#xff01;通过双重异步&#xff0c;Excel 10万行数据导入从191秒优化到2秒&#xff01; 在现代的企业级应用开发中&#xff0c;海量数据的处理效率和并发性能优化是一个非常重要的课题。无论是大规模数据导入、文件解析&#xff0c;还是在分布式系统中处理高并发任务&a…

Linux编程:用于调试 C、C++ 和其他编程语言编写的程序的调试工具GDB的使用

目录 一、概述 二、 安装GDB 三、准备程序 四、使用GDB 1、启动GDB 2、获取帮助 五、 常用GDB命令 六、示例调试会话 七、其他事项 一、概述 GDB&#xff08;GNU Debugger&#xff09;是一个非常强大的调试工具&#xff0c;广泛用于调试 C、C 和其他编程语言编写的程序…

书生实战营第四期-基础岛第五关-XTuner 微调个人小助手认知

基础任务 使用 XTuner 微调 InternLM2-Chat-7B 实现自己的小助手认知 一、环境配置与数据准备 1.构建虚拟环境 cd ~ #git clone 本repo git clone https://github.com/InternLM/Tutorial.git -b camp4 mkdir -p /root/finetune && cd /root/finetune conda create -…

java day04-面向对象基础(内存 封装 继承 修饰符 工具类 )

1.对象内存图 1.1 Java 内存分配 1.2 堆和栈 栈:所有局部变量都会在栈内存中创建 局部变量&#xff1a;定义在方法中的变量或者方法声明上的变量 方法执行都会加载到栈中进行 -----------------------------------------------------------------------------------------…

【C++练习】二进制到十进制的转换器

题目&#xff1a;二进制到十进制的转换器 描述 编写一个程序&#xff0c;将用户输入的8位二进制数转换成对应的十进制数并输出。如果用户输入的二进制数不是8位&#xff0c;则程序应提示用户输入无效&#xff0c;并终止运行。 要求 程序应首先提示用户输入一个8位二进制数。…

Pytorch学习--神经网络--网络模型的保存与读取

一、网络模型的保存与读取方式1 方法讲解 保存模型 import torch import torchvision model torchvision.models.vgg16(weightsDEFAULT) #保存模型和参数 torch.save(model,"save_method1.pth")读取模型 import torch model torch.load("save_method1.pth&…

凸优化理论,凸二次规划问题,对偶问题及KKT条件

凸优化理论 ​ 研究凸优化之前我们不妨提出几个小问题&#xff1a; 什么是优化问题&#xff1f;优化问题的解是什么&#xff1f;什么是凸优化问题&#xff1f;凸优化问题的解决方案是什么&#xff1f; 1.1 优化问题 ​ 理解优化问题其实很简单&#xff0c;我们其实从高中事…

智能的编织:C++中auto的编织艺术

在C的世界里&#xff0c;auto这个关键字就像是一个聪明的助手&#xff0c;它能够自动帮你识别变量的类型&#xff0c;让你的代码更加简洁和清晰。下面&#xff0c;我们就来聊聊auto这个关键字的前世今生&#xff0c;以及它在C11标准中的新用法。 auto的前世 在C11之前&#x…

The Rank-then-Encipher Approach

原始观点 Format-Preserving Encryption 4 The Rank-then-Encipher Approach 引用1 Hybrid diffusion-based visual image encryption for secure cloud storage 2.2 Sum-preserving encryption Bellare introduced the concept of format-preserving encryption (FPE)…