数据结构---数组

一、基本概念

1. 存放一组相同数据类型的集合

2.在内存中,分配连续的空间,数组创建时要指定大小

3. 定义    数据类型 [] 数组名

//  1.定义一个数组,里面的元素包含10, 20, 24, 17, 35, 58, 45, 74
int arr[] = {10, 20, 24, 17, 35, 58, 45, 74};

4. 获取数组的长度

int length = arr.length;

5.获取数组中指定位置的元素

int number = arr[1];//  第2个位置的值

6.修改数组中指定位置的元素

arr[2] = 100;//  将第三位的数字改为100

7.数组排序

Arrays.sort(arr);

8.遍历数组

for (int i = 0; i < arr.length; i++) {System.out.println(arr[i]);
}

9.索引从0开始,最大为数组长度-1

10.访问数组中元素需要通过索引

11.常见的错误:NULLPointException(空指针异常) ArrayIndexOutofBoundsException(数组索引越界)

System.out.println(arr[length]);//  ArrayIndexOutofBoundsException(数组索引越界)

12.常见的数组:字符串,对象数组,哈希表 

二、Java数组的特点

<1>数组在内存中连续分配

<2>创建数组时要指明数组的大小

<3>如何访问数组,通过索引,索引从0开始,到数组的长度-1

<4>使用索引

  • 获取指定索引位置的值 arr[index]

  • 修改指定索引位置的值 arr[index] = 值

  • 删除数组中元素(假删除----空间未被删除)

  • 数组的遍历:将数组中的元素一一打印出来

数组最大的优点:快速查询

三、数组的基本操作 

  1. 构造函数

    public MyArray(int capacity) {//  判断容量if (capacity < 0) {this.capacity = 10;} else {this.capacity = capacity;}this.size = 0;this.data = (T[]) (new Object[this.capacity]);//  为泛型数组赋值
    }
  2. 获取数组中实际存放元素的个数

    public int getSize() {return this.size;
    }
  3. 获取数组的容积 

    public int getCapacity() {return this.capacity;
    }
  4. 判断数组是否为空

    public boolean isEmpty() {return this.size == 0;
    }
  5. 向数组中添加元素

    public void add(T item) {//  this.size  指向的是待插入元素的位置addIndex(this.size, item);
    }
    ​
  6. 向数组中添加元素(头部)

    public void addHead(T item) {addIndex(0, item);
    }
  7. 根据索引修改值

    public void setValByIndex(int index, T val) {//  判断索引范围  不符合抛出异常if (index < 0 || index >= this.size) {throw new IllegalArgumentException("index is invalid");}this.data[index] = val;
    }
  8. 扩容resize(自定义扩容函数)

    private void resize(int newCapacity) {System.out.println("resize:" + newCapacity);//  打印数组的新容量T[] newData = (T[]) (new Object[newCapacity]);//  创建一个新的泛型数组并赋值//  将原数组中元素加到新数组for (int i = 0; i < this.size; i++) {newData[i] = this.data[i];}//  改变容量与容积this.data = Arrays.copyOf(newData, newCapacity);this.capacity = newCapacity;
    }
  9. 向数组中在指定位置添加元素

    public void addIndex(int index, T val) {//  判断索引范围  不符合抛出异常if (index < 0 || index > this.size) {throw new IllegalArgumentException("index is invalid");}//判断数组是否满if (this.size == this.capacity) {// 扩容   resize  容积扩一倍capacity *= 2;System.out.println("resize:" + capacity);//  打印数组的新容量this.data = Arrays.copyOf(data, capacity * 2);//  使用数组复制函数//resize(this.capacity * 2);//  使用自定义函数}//从index位置开始,元素需要进行后移for (int i = this.size - 1; i >= index; i--) {this.data[i + 1] = this.data[i];}//  向指定位置添加元素this.data[index] = val;//更新this.sizethis.size++;
    }
    ​
  10. 修改指定位置的值

    public void modifyValueByIndex(int index, T value) {//  入参判断--对输入的参数进行判断    参数有误抛异常(index is invlid.)if (index < 0 || index >= this.capacity) {throw new IllegalArgumentException("index is invlid.");}this.data[index] = value;//  修改指定位置的值
    }
  11. 获取指定索引位置的值

    public T getValueByIndex(int index) {//  入参判断--对输入的参数进行判断    参数有误抛异常(index is invlid.)if (index < 0 || index >= this.capacity) {throw new IllegalArgumentException("index is invlid.");}return this.data[index];//  返回指定索引的值
    }
    ​
  12. 查询指定的值在数组是否存在

    public int containsValue(T val) { //  遍历数组    返回对应索引  使用比较函数    如存在,获取索引,否则返回-1for (int i = 0; i < this.size; i++) {if (val.equals(this.data[i])) {return i;}}return -1;
    }
  13. 根据索引删除从数组中删除元素

    public T removeByIndex(int index) {//  入参判断--对输入的参数进行判断    参数有误抛异常(index is invlid.)if (index < 0 || index >= this.size) {throw new IllegalArgumentException("index is invlid.");}
    ​//  删除操作的核心/*** 1.找到删除的位置* 2.删除位置之后的元素要前移   arr[j-1] = arr[j]*/T delValue = this.data[index];//  获取要删除索引的值for (int i = index + 1; i < this.size; i++) {this.data[i - 1] = this.data[i];}//  更新数组索引this.size--;//  判断是否缩容if (this.size < this.capacity / 4 && this.capacity / 2 > 0) {capacity /= 2;this.data = Arrays.copyOf(data, capacity);//resize(this.capacity / 2);//  使用自己编写的缩容函数}return delValue;//  返回删除的值
    }
  14. 重写toString---ctrl+O

    @Override
    public String toString() {//  [1,2,3,4,5]StringBuilder sb = new StringBuilder("[");//  遍历将数据逐个拼接   中间用逗号隔开for (int i = 0; i < this.size; i++) {sb.append(this.data[i]);if (i != this.size - 1) {sb.append(",");}}sb.append("]");return sb.toString();//  返回字符串
    }
  15. 将一个数组转换为字符串

//  将一个数组转换成字符串
int[] res = {1, 2, 3, 4, 5};
//  方式1
String temp = Arrays.toString(res);
System.out.println(temp);//  [1, 2, 3, 4, 5]
//  方式2
temp = Arrays.stream(res).boxed().map(Objects::toString).collect(Collectors.joining(""));
System.out.printf(temp);//  12345
  1. 向原数组中继续添加一个元素,就会越界(解决办法:扩容)
  2. 只能处理int类型,如何处理多种类型---(解决方法:使用泛型)
  3. 删除元素后,空间利用率低(解决方法:减少容量)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

wayland(xdg_wm_base) + egl + opengles 最简实例

文章目录 前言一、ubuntu 下相关环境准备1. 获取 xdg_wm_base 依赖的相关文件2. 查看 ubuntu 上安装的opengles 版本3. 查看 weston 所支持的 窗口shell 接口种类二、xdg_wm_base 介绍三、egl_wayland_demo1.egl_wayland_demo2_0.c2.egl_wayland_demo3_0.c3. xdg-shell-protoco…

Chatopera 云服务支持大语言模型对话(LLM),定制您的聊天机器人

2024 年&#xff0c;Chatopera 云服务继续不断完善&#xff0c;为开发者提供最好的定制聊天机器人的工具。在过去的一年&#xff0c;用户们反映最多的建议是 Chatopera 云服务内置大语言模型的对话&#xff0c;今天 Chatopera 云服务完成了产品升级&#xff0c;满足了这个诉求。…

HCIP-BGP选路实验

一.实验拓扑图 二.详细配置 R1 interface GigabitEthernet0/0/0 ip address 12.1.1.1 255.255.255.0interface LoopBack0 ip address 1.1.1.1 255.255.255.0interface LoopBack1 ip address 10.1.1.1 255.255.255.0bgp 1 router-id 1.1.1.1 peer 12.1.1.2 as-number 2ipv4-fa…

Python MySQL 数据库查询:选择数据、使用筛选条件、防止 SQL 注入

从表格中选择数据 要从MySQL中的表格中选择数据&#xff0c;请使用"SELECT"语句&#xff1a; 示例选择"customers"表格中的所有记录&#xff0c;并显示结果&#xff1a; import mysql.connectormydb mysql.connector.connect(host"localhost"…

模型服务网格:云原生下的模型服务管理

作者&#xff1a;王夕宁 模型服务网格&#xff08;Model Service Mesh&#xff09;是一种架构模式&#xff0c;用于在分布式环境中部署和管理机器学习模型服务。它提供了一个可扩展的、高性能的基础架构&#xff0c;用于将多个模型服务进行管理、部署和调度&#xff0c;以此更…

0基础开发EtherNet/IP:协议格式,JAVA、C#、C++处理

经过一阵倒腾&#xff0c;把CIP、Ethernet/ip协议搞到手 协议的概念和理论就不提及了&#xff0c;上网随便一搜索EtherNet/IP遍地都是。 直接将协议关键点列举出来吧。 更多协议资料 www.jngbus.com 通讯软件群 30806722 这里讲解的是TCP和UDP协议的格式&#xff0c;EtherN…

vue.config.js中打包相关配置

1.原始篇 let path require(path); const webpack require(webpack); const ThemeColorReplacer require(webpack-theme-color-replacer); const { getThemeColors, modifyVars } require(./src/utils/themeUtil); const { resolveCss } require(./src/utils/theme-color…

Python并发与多线程:并发网络通信模型

在Python中&#xff0c;有多种方式可以实现并发网络通信模型&#xff0c;其中包括多线程、多进程、协程和异步IO等。在本篇中&#xff0c;我们主要讨论多线程实现并发网络通信的方法。 使用多线程可以在一个程序中同时处理多个网络连接&#xff0c;从而提高程序的性能和效率。…

如何本地部署虚拟数字克隆人 SadTalker

环境&#xff1a; Win10 SadTalker 问题描述&#xff1a; 如何本地部署虚拟数字克隆人 SadTalker 解决方案&#xff1a; SadTalker&#xff1a;学习逼真的3D运动系数&#xff0c;用于风格化的音频驱动的单图像说话人脸动画 单张人像图像&#x1f64e; ♂️音频&#x1f3…

伊恩·斯图尔特《改变世界的17个方程》傅里叶变换笔记

主要是课堂的补充&#xff08;yysy&#xff0c;我觉得课堂的教育模式真有够无聊的&#xff0c;PPT、写作业、考试&#xff0c;感受不到知识的魅力。 它告诉我们什么&#xff1f; 空间和时间中的任何模式都可以被看作不同频率的正弦模式的叠加。 为什么重要&#xff1f; 频率分量…

【图解数据结构】顺序表实战指南:手把手教你详细实现(超详细解析)

&#x1f308;个人主页&#xff1a;聆风吟 &#x1f525;系列专栏&#xff1a;图解数据结构、算法模板 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 一. ⛳️线性表1.1 &#x1f514;线性表的定义1.2 &#x1f514;线性表的存储结构 二. ⛳️顺序表…

论文阅读_CogTree_推理的认知树

英文名称: From Complex to Simple: Unraveling the Cognitive Tree for Reasoning with Small Language Models中文名称: 从复杂到简单&#xff1a;揭示小型语言模型推理的认知树链接: http://arxiv.org/abs/2311.06754v1代码: https://github.com/alibaba/EasyNLP作者: Junbi…

OpenCompass大模型测评

一、笔记 为什么大模型需要开展测评? 大模型测评有以下原因&#xff1a; 1、让普通用户了解大模型的能力和特点&#xff0c;选择合适的大模型 2、让开发者了解大模型的能力边界&#xff0c;找到提升的地方 3、让管理机构更了解大模型&#xff0c;减少大模型带来的社会风险 …

为vs code配置unity开发环境

1.安装.NET.Core SDK 我们可以访问官网下载安装SDK及tool&#xff08;https://www.microsoft.com/net/download/core&#xff09;下载。有的系统只提供了执行文件&#xff0c;没有提供安装包&#xff0c;需要自己做一些配置。 下载好对应的版本就可以安装了&#xff0c;安装好以…

Video 不支持微信小程序的show-bottom-progress属性

原文地址&#xff1a;Video 不支持微信小程序的show-bottom-progress属性-鹭娃网络 相关平台 微信小程序 小程序基础库: 2.20.1使用框架: React 复现步骤 import { Video} from tarojs/components; 渲染一个Video播放视频&#xff0c;无法隐藏手机屏幕最底部的进度条&#…

【JavaEE】文件操作与IO

作者主页&#xff1a;paper jie_博客 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文于《JavaEE》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心打造的。笔者用重金(时间和精力)打造&…

L1-067 洛希极限(Java)

科幻电影《流浪地球》中一个重要的情节是地球距离木星太近时&#xff0c;大气开始被木星吸走&#xff0c;而随着不断接近地木“刚体洛希极限”&#xff0c;地球面临被彻底撕碎的危险。但实际上&#xff0c;这个计算是错误的。 洛希极限&#xff08;Roche limit&#xff09;是一…

【SpringCloud】微服务框架后端部署详细过程记录20240119

前言&#xff1a;前两天公司接到客户提供的一个微服务框架&#xff0c;导师让我在本地部署验证一下该框架的可用性&#xff0c;借此机会记录一下微服务项目的一个基本部署流程&#xff0c;仅供学习参考&#xff0c;如有不足还请指正&#xff01; 文件结构 提供的压缩文件共包含…

IDEA在重启springboot项目时没有自动重新build

IDEA在重启springboot项目时没有自动重新build 问题描述 当项目里面某些依赖或者插件更新了&#xff0c;target的class文件没有找到&#xff0c;导致不是我们需要的效果。 只能手动的清理target文件&#xff0c;麻烦得很 &#xff0c; 单体项目还好说&#xff0c;一次清理就…

如何让 Websocket兼容低版本浏览器

要使WebSocket兼容低版本浏览器&#xff0c;可以使用一些降级策略。以下是一些可能的方法&#xff1a; 使用WebSocket的替代方案&#xff1a;在低版本浏览器中&#xff0c;可以使用一些基于HTTP的长轮询或流技术来实现类似于WebSocket的功能。常见的替代方案包括Comet、SSE&…