[Java · 铢积寸累] 数据结构 — 数组类型 - 增 删 改 查

news2025/4/25 20:32:59

🌟 想系统化学习 Java 编程?看看这个:[编程基础] Java · 学习手册

在上一章中我们介绍了如何声明与创建数组,还介绍了数组的基本使用方式。本章我们将在上一章的基础上,拓展数组的使用方式(可能会涉及一些思维题)。

0x01:数组的应用 — 遍历数组元素

0x0101:普通 for 循环遍历数组元素

使用 for 循环结合数组的 length 属性,我们可以很轻松的打印数组的每个元素:

public class TestVar {
    public static void main(String[] args) {
        int[] arr = {10, 20, 30, 40};
​
        for (int i = 0; i < arr.length; i++) {
            System.out.println("arr 数组的第 " + i + " 个元素: " + arr[i]);
        }
    }
}

0x0102:增强 for 循环遍历数组元素

除了普通 for 循环,对于数组,我们还可以使用增强 for 循环来简单的遍历数组的元素内容。只不过此时我们无法使用跟索引有关的操作:

public class TestVar {
    public static void main(String[] args) {
        int[] arr = {10, 20, 30, 40};
​
        // 对 arr 数组进行遍历,遍历出来的每个元素都用 int 型的 num 接收
        int index = 1; // 数组当前的下标
        for (int num : arr) {
            System.out.println("arr 数组的第 " + index + " 个元素: " + num);
            index++;
        }
    }
}

0x02:数组的应用 — 数组最值问题

0x0201:引用类型 — 地址传递

在前面的章节中,我们介绍了方法,说 Java 是 值传递 。但那个时候说法其实是不完全的,这里补全一下:

  • 如果使用的是基本数据类型: 那么传递的就是字面值。

  • 如果使用的是引用数据类型: 那么传递的就是地址值。

好巧不巧,我们数组,就是一个引用数据类型。看下面这个例子(我们在函数中的修改,也将影响到主函数中数组的内容):

public class TestVar {
    public static void main(String[] args) {
        int[] arr = {10, 20, 30, 40};
​
        changeArryLast(arr); // 调用方法
        // 对 arr 数组进行遍历,遍历出来的每个元素都用 int 型的 num 接收
        int index = 1; // 数组当前的下标
        for (int num : arr) {
            System.out.println("arr 数组的第 " + index + " 个元素: " + num);
            index++;
        }
    }
​
    public static void changeArryLast(int[] arr) {
        // 改变数组最后一位的值为 17
        arr[arr.length - 1] = 17;
    }
}

0x0202:求数组中的最小值

现在有这个一个需求,给定一个 int 型数组 {10, 17, 14, 16, 20, 4} 求出数组的最小值。你能用什么方法完成这个需求?笔者这里直接上代码了哈(其实就是打擂台,谁小,谁就站得住):

public class TestVar {
    public static void main(String[] args) {
        int[] arr = {10, 17, 14, 16, 20, 4};
        int min = getMinNumber(arr);
        System.out.println("数组中的最小值为: " + min);
    }
​
    public static int getMinNumber(int[] arr) {
        int min = arr[0]; // 假设数组第 0 个值为最小值
        for (int num : arr) {
            if (min > num) { // 如果最小值比当前的值大,就把最小值赋给 min
                min = num;
            }
        }
        return min; // 返回最小值
    }
}

0x0203:求数组中的最大值

继续,给定一个 int 型数组 {10, 17, 14, 16, 20, 4} 求出数组的最大值:

public class TestVar {
    public static void main(String[] args) {
        int[] arr = {10, 17, 14, 16, 20, 4};
        int min = getMaxNumber(arr);
        System.out.println("数组中的最大值为: " + min);
    }
​
    public static int getMaxNumber(int[] arr) {
        int max = arr[0]; // 假设数组第 0 个值为最大值
        for (int num : arr) {
            if (max < num) { // 如果最大值比当前的值小,就把最大值赋给 max
                max = num;
            }
        }
        return max; // 返回最小值
    }
}

0x03:数组的应用 — 数组查询问题

0x0301:查询问题 — 查询指定位置的元素

查询值定位置的元素,即根据提供的下标,获取数组中对应元素的值。这个最简单,直接上代码:

public class TestVar {
    public static void main(String[] args) {
        int[] arr = {10, 17, 14, 16, 20, 4};
        System.out.println("arr 中下标为 " + 2 + " 的元素的值是 " + getIndexValue(arr, 2));
    }
​
    public static int getIndexValue(int[] arr, int index) {
        // bug: 若 index < 0 或者 > length 咋办
        // 根据 index 的值返回 arr 中对应的值
        return arr[index];
    }
}

0x0302:查询问题 — 查询单个元素对应索引

有时候我们会有这么一个需求,即想根据一个值,查询这个值在数组中的索引是多少:

public class TestVar {
    public static void main(String[] args) {
        int[] arr = {10, 17, 14, 16, 20, 4};
        int index = getIndex(arr, 16); // 在 arr 中查询元素 16 的下标
        if (index == -1) {
            System.out.println("抱歉, arr 数组中查无此数");
        } else {
            System.out.println("arr 中元素 16 的下标为: " + index);
        }
    }
​
    /*
    查询数组指定元素对应的索引
    @arr : 待查询元素的数组
    @value: 待查询的元素值
    @return: 元素对应的索引下标 (int 型),若值为 -1 代表查询失败
     */
    public static int getIndex(int[] arr, int value) {
        int index = -1;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == value) { // 如果当前元素的值与待查询元素值相同,则返回元素下标
                return i;
            }
        }
        return index; // 否则返回 -1,代表未查询到
    }
}

0x04:数组的应用 — 元素添加问题

在使用数组时,我们经常会想往数组的一个指定位置添加元素。下面是一个示例代码:

import java.util.Scanner;
​
public class TestVar {
    public static void main(String[] args) {
        int[] arr = new int[5]; // 创建一个 5 个空间大小的数组
​
        // 为数组的前 4 个空格赋值
        arr[0] = 1;
        arr[1] = 2;
        arr[2] = 3;
        arr[3] = 4;
​
        // 获取用户想要插入的元素,和元素下标
        Scanner sc = new Scanner(System.in);
        System.out.print("Enter array elements:");
        int value = sc.nextInt();
        System.out.print("Enter array index:");
        int index = sc.nextInt();
​
        // 将 value 插入到数组的 index 位置
        insertValue(arr, index, value);
​
        // 打印插入后的数组
        System.out.println("增加元素后的数组为: ");
        for (int num : arr) {
            System.out.print(num + " ");
        }
    }
​
    /*
        往数组的指定位置添加元素
        @param: arr => 待插入元素的数组
        @param: index => 待插入元素的数组下标
        @param: value => 待插入数组的值
     */
    public static void insertValue(int[] arr, int index, int value) {
        for (int i = arr.length - 1; i > index; i--) {
            arr[i] = arr[i - 1];
        }
        arr[index] = value;
    }
}

0x05:数组的应用 — 数组删除问题

0x0501:数组删除 — 删除指定位置上的元素

笔者直接上示例代码了,即根据用户传入的下标,删除指定位置上的元素:

import java.util.Scanner;

public class TestVar {
    public static void main(String[] args) {
        int[] arr = new int[]{1, 2, 3, 4, 5};

        // 获取用户想要删除的元素下标
        Scanner sc = new Scanner(System.in);
        System.out.print("待删除的元素下标:");
        int index = sc.nextInt();

        // 打印删除前的数组值
        System.out.println("删除前的数组内容: ");
        for (int num : arr) {
            System.out.print(num + " ");
        }

        // 删除指定位置的元素
        deleteIndex(arr, index);

        // 打印删除后的数组值
        System.out.println("\n 删除后的数组内容: ");
        for (int num : arr) {
            System.out.print(num + " ");
        }
    }

    /*
        根据用户传入的下标位置,删除数组中指定位置上的值
        @param arr => 待删除的数组对象
        @param index => 待删除的元素位置
     */
    public static void deleteIndex(int[] arr, int index) {
        for (int i = index; i < arr.length - 1; i++) {
            arr[i] = arr[i + 1];
        }
        arr[arr.length - 1] = 0; // 给末尾值赋 0 代表被删除
    }
}

0x0502:数组删除 — 删除数组中的指定元素

除了根据下标去删除数组中的内容外,我们还可以根据值进行删除:

import java.util.Scanner;

public class TestVar {
    public static void main(String[] args) {
        int[] arr = new int[]{1, 2, 3, 4, 5};

        // 获取用户想要删除的元素下标
        Scanner sc = new Scanner(System.in);
        System.out.print("待删除的元素的内容:");
        int value = sc.nextInt();

        // 打印删除前的数组值
        System.out.println("删除前的数组内容: ");
        for (int num : arr) {
            System.out.print(num + " ");
        }

        // 删除数组中的指定元素
        deleteValue(arr, value);

        // 打印删除后的数组值
        System.out.println("\n 删除后的数组内容: ");
        for (int num : arr) {
            System.out.print(num + " ");
        }
    }

    /*
        根据用户传入的元素的值,从数组中删除指定的元素
        @param arr => 待删除的数组对象
        @param value => 待删除的元素的值
     */
    public static void deleteValue(int[] arr, int value) {
        // 第一步: 从数组中查找到要删除的值的位置
        int index = -1;
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] == value) {
                index = i;
                break;
            }
        }

        // 第二步: 判断数组中是否有待删除的值
        if (index == -1) {
            System.out.println("抱歉,数组红没有待删除的值 !");
            return;
        }

        // 第三步: 根据获得的位置,从数组中删除对应的值
        for (int i = index; i < arr.length - 1; i++) {
            arr[i] = arr[i + 1];
        }
        arr[arr.length - 1] = 0; // 给末尾值赋 0 代表被删除
    }
}

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

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

相关文章

前端笔记-Axios

Axios学习目标 Axios与API交互1、Axios配置与使用2、请求/响应拦截器3、API设计模式&#xff08;了解RESTful风格即可&#xff09; 学习参考&#xff1a;起步 | Axios中文文档 | Axios中文网 什么是Axios Axios 是一个基于 Promise 的现代化 HTTP 客户端库&#xff0c;专…

C# 类型、存储和变量(值类型引用类型)

本章内容 C#程序是一组类型声明 类型是一种模板 实例化类型 数据成员和函数成员 预定义类型 用户定义类型 栈和堆 值类型和引用类型 变量 静态类型和dynamic关键字 可空类型 值类型引用类型 数据项的类型定义了存储数据需要的内存大小及组成该类型的数据成员。类型还决定了对象…

智慧校园从配电开始:AISD300为校园安全加上智能防护罩

安科瑞刘鸿鹏 摘要 随着校园用电需求不断上升及其安全保障要求的提高&#xff0c;传统低压配电系统已逐渐难以满足现代校园的安全与智能化管理需求。本文基于安科瑞电气推出的AISD300系列三相智能安全配电装置&#xff0c;探讨其在校园电力系统中的应用优势及关键技术特性。…

一 、环境的安装 Anaconda + Pycharm + PaddlePaddle

《从零到一实践&#xff1a;系统性学习生成式 AI(NLP)》 一 、环境的安装 Anaconda Pycharm PaddlePaddle 1. Anaconda 软件安装 Anaconda 软件安装有大量的教程&#xff0c;此处不在说明&#xff0c;安装完成之后界面如下&#xff1a; 2. 创建 Anaconda 虚拟环境 Paddl…

十倍开发效率 - IDEA插件之 Maven Helper

0X00 先看效果 第一个选项表示存在冲突的依赖&#xff0c;可以看到图片中 mysql 的连接依赖发生了冲突&#xff0c;在低版本的上面直接右键选择 Exclude&#xff0c;冲突的依赖就被解决掉了。 0X01 安装 在 Plugins 中直接搜索 Maven Helper&#xff0c;选择第一个进行安装&am…

人机共跑,马拉松人型机器人同跑

马拉松比赛对人形机器人来说&#xff0c;是一场对硬件极限的测试&#xff0c;涉及机械、传感器、能源管理等多个方面。用户问的是硬件方面的考察和改进&#xff0c;这意味着我的回答需要聚焦于硬件性能&#xff0c;而不是算法或软件的优化。 对人形机器人硬件的考研 机械结构与…

策略模式:动态切换算法的设计智慧

策略模式&#xff1a;动态切换算法的设计智慧 一、模式核心&#xff1a;定义一系列算法并可相互替换 在软件开发中&#xff0c;常常会遇到需要根据不同情况选择不同算法的场景。例如&#xff0c;在电商系统中&#xff0c;根据不同的促销活动&#xff08;如满减、折扣、赠品&a…

uniapp微信小程序:WIFI设备配网之TCP/UDP开发AP配网

一、AP配网技术原理 1.1 配网模式选择 AP配网&#xff08;SoftAP模式&#xff09;是IoT设备配网成功率最高的方案之一 1、其核心原理&#xff1a; ​​设备端​​&#xff1a;启动AP模式&#xff08;如SSID格式YC3000_XXXX&#xff0c;默认IP192.168.4.1&#xff09;​​手…

离线-DataX

基本介绍 DataX 是阿里云 DataWorks数据集成的开源版本&#xff0c;在阿里巴巴集团内被广泛使用的离线数据同步工具/平台&#xff0c;它是一个异构数据源离线同步工具&#xff0c;致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源…

第5课:对象与类——JS的“信息收纳盒”

生活从不会亏待每一个努力向上的人&#xff0c;愿你带着满腔热忱&#xff0c;无畏前行&#xff0c;用汗水书写青春的华章&#xff0c;用拼搏铸就人生的辉煌&#xff0c;今日的每一份付出&#xff0c;都将是未来成功的基石&#xff01; 欢迎来到「JavaScript 魔法学院」第 5 课…

xshell 登录验证失败解决

产生原因&#xff1a;检查防火墙、selinux 、网络模式、对外是否能ping外网 systemctl status firewalld cat /etc/selinux/config #disabled ping 223.5.5.5 ping 8.8.8.8 ping www.baidu.com 一、检查网络连接 确认虚拟机是否在线&#xff1a; 首先&#xff0c;确保虚…

AI 赋能 3D 创作!Tripo3D 全功能深度解析与实操教程

大家好&#xff0c;欢迎来到本期科技工具分享&#xff01; 今天要给大家带来一款革命性的 AI 3D 模型生成平台 ——Tripo3D。 无论你是游戏开发者、设计师&#xff0c;还是 3D 建模爱好者&#xff0c;只要想降低创作门槛、提升效率&#xff0c;这款工具都值得深入了解。 接下…

AI书籍大模型微调-基于亮数据获取垂直数据集

大模型的开源&#xff0c;使得每位小伙伴都能获得AI的加持&#xff0c;包括你可以通过AIGC完成工作总结&#xff0c;图片生成等。这种加持是通用性的&#xff0c;并不会对个人的工作带来定制的影响&#xff0c;因此各个行业都出现了垂直领域大模型。 垂直大模型是如何训练出来…

Kafka命令行的使用/Spark-Streaming核心编程(二)

Kafka命令行的使用 创建topic kafka-topics.sh --create --zookeeper node01:2181,node02:2181,node03:2181 --topic test1 --partitions 3 --replication-factor 3 分区数量&#xff0c;副本数量&#xff0c;都是必须的。 数据的形式&#xff1a; 主题名称-分区编号。 在…

2020-06-23 暑期学习日更计划(机器学习入门之路(资源汇总)+概率论)

机器学习入门 前言 说实话&#xff0c;机器学习想学好真心不易&#xff0c;很多时候都感觉自己学得云里雾里。以前一段时间自己为了完成毕业设计&#xff0c;在机器学习的理论部分并没有深究&#xff0c;仅仅通过TensorFlow框架力求快速实现模型。现在来看&#xff0c;很多时候…

SQL 时间转换的CONVERT()函数应用说明

目录 1.常用查询使用的几个 2.其他总结 1.常用查询使用的几个 SELECT CONVERT(VARCHAR, GETDATE(), 112) SELECT CONVERT(VARCHAR, GETDATE(), 113)SELECT CONVERT(VARCHAR, GETDATE()-1, 112) SELECT CONVERT(VARCHAR, GETDATE()-1, 113) 2.其他总结 SELECT CONVERT(VARCHA…

SystemWeaver详解:从入门到精通的深度实战指南

SystemWeaver详解&#xff1a;从入门到精通的深度实战指南 文章目录 SystemWeaver详解&#xff1a;从入门到精通的深度实战指南一、SystemWeaver环境搭建与基础配置1.1 多平台安装全流程 二、新手必学的十大核心操作2.1 项目创建全流程2.2 建模工具箱深度解析 三、需求工程与系…

windows中kafka4.0集群搭建

参考文献 Apache Kafka windows启动kafka4.0&#xff08;不再需要zookeeper&#xff09;_kafka压缩包-CSDN博客 Kafka 4.0 KRaft集群部署_kafka4.0集群部署-CSDN博客 正文 注意jdk需要17版本以上的 修改D:\software\kafka_2.13-4.0.0\node1\config\server.properties配置文…

【JavaWeb后端开发04】java操作数据库(JDBC + Mybatis+ yml格式)详解

文章目录 1. 前言2. JDBC2.1 介绍2.2 入门程序2.2.1 DataGrip2.2.2 在IDEA执行sql语句 2.3 查询数据案例2.3.1 需求2.3.2 准备工作2.3.3 AI代码实现2.3.4 代码剖析2.3.4.1 ResultSet2.3.4.2 预编译SQL2.3.4.2.1 SQL注入2.3.4.2.2 SQL注入解决2.3.4.2.3 性能更高 2.4 增删改数据…

postman 删除注销账号

一、删除账号 1.右上角找到 头像&#xff0c;view profile https://123456-6586950.postman.co/settings/me/account 二、找回账号 1.查看日志所在位置 三、postman更新后只剩下history 在 Postman 中&#xff0c;如果你发现更新后只剩下 History&#xff08;历史记录&…