Java从入门到“放弃”(精通)之旅——数组的定义与使用⑥

news2025/5/10 13:00:09

Java从入门到“放弃”(精通)之旅🚀——数组⑥

前言——什么是数组?

数组:可以看成是相同类型元素的一个集合,在内存中是一段连续的空间。比如现实中的车库,在java中,包含6个整形类型元素的数组,就相当于上图中连在一起的6个车位,从下图中可以看到:
在这里插入图片描述

📖一、数组的基本概念

1.1 为什么需要数组

考虑存储5个学生的考试成绩:

// 传统方式
int score1 = 70;
int score2 = 80;
// ...需要定义多个变量

这种方式在数据量大时非常不便。数组应运而生,它可以存储相同类型的多个数据,是内存中的一段连续空间

1.2 数组的特点

  • 元素类型相同
  • 内存空间连续
  • 通过下标访问(从0开始)

🔛二、数组的创建与初始化

2.1 数组创建语法

T[] 数组名 = new T[N];  // T:元素类型,N:数组长度

示例:

int[] array1 = new int[10];      // 10个int
double[] array2 = new double[5]; // 5个double

2.2 初始化方式

动态初始化:指定长度

int[] array = new int[10];  // 默认值0

静态初始化:指定内容

int[] array1 = new int[]{1,2,3};
// 简写形式
int[] array2 = {1,2,3};  

注意

  • 静态初始化无需指定长度
  • 简写形式不能拆分两步操作

2.3 默认值规则

✅Java数组元素默认值对照表

数据类型默认值
byte0
short0
int0
long0
float0.0f
double0.0
char‘\u0000’
booleanfalse

说明:

  1. 数值类型(byte/short/int/long/float/double)默认值均为0
  2. char类型默认是Unicode空字符(\u0000)
  3. boolean类型默认false
  4. 引用类型(如String、Object等)默认值为null

注意:当数组被创建但未显式初始化时,各元素会被自动赋予对应类型的默认值

🔧三、数组的使用

3.1 元素访问

int[] arr = {10,20,30};
System.out.println(arr[0]); // 10
arr[0] = 100; // 修改元素

重要:下标从0开始,越界会抛出ArrayIndexOutOfBoundsException

3.2 遍历数组

传统for循环

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

增强for循环(for-each)

for(int num : arr){
    System.out.println(num);
}

🤖四、数组的内存模型

4.1 JVM内存划分

  • :存储局部变量
  • :存储对象和数组
  • 方法区、程序计数器等
    在这里插入图片描述

4.2 引用类型特性(简化版指针)

int[] arr1 = new int[]{1,2,3};
int[] arr2 = arr1;  // 两个引用指向同一数组

🕹️五、数组常见操作

5.1 数组拷贝

浅拷贝

int[] newArr = arr;  // 共享同一数组

示意图:
在这里插入图片描述

深拷贝

// 方法1:System.arraycopy
int[] newArr = new int[arr.length];
System.arraycopy(arr, 0, newArr, 0, arr.length);

// 方法2:Arrays.copyOf
int[] newArr = Arrays.copyOf(arr, arr.length);

示意图:在这里插入图片描述

5.2 数组排序

冒泡排序

void bubbleSort(int[] arr){
    for(int i=0; i<arr.length-1; i++){
        for(int j=0; j<arr.length-1-i; j++){
            if(arr[j] > arr[j+1]){
                int tmp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = tmp;
            }
        }
    }
}

内置排序

Arrays.sort(arr);  // 快速排序实现

5.3 二分查找

int binarySearch(int[] arr, int key){
    int left = 0, right = arr.length-1;
    while(left <= right){
        int mid = (left + right)/2;
        if(arr[mid] == key) return mid;
        else if(arr[mid] < key) left = mid+1;
        else right = mid-1;
    }
    return -1;
}

📜六、二维数组

6.1 基本使用

int[][] arr = {
    {1,2,3},
    {4,5,6}
};

// 遍历
for(int i=0; i<arr.length; i++){
    for(int j=0; j<arr[i].length; j++){
        System.out.print(arr[i][j]+" ");
    }
    System.out.println();
}

⚙️七、实际应用案例

7.1 斐波那契数列

public static int[] fib(int n){
    if(n <= 0) return null;
    int[] arr = new int[n];
    arr[0] = arr[1] = 1;
    for(int i=2; i<n; i++){
        arr[i] = arr[i-1] + arr[i-2];
    }
    return arr;
}

7.2 冒泡排序

public class BubbleSort {
    public static void bubbleSort(int[] arr) {
        int n = arr.length;
        for (int i = 0; i < n - 1; i++) {
            for (int j = 0; j < n - i - 1; j++) {
                if (arr[j] > arr[j + 1]) {
                    // 交换arr[j]和arr[j + 1]
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }

    public static void main(String[] args) {
        int[] array = {64, 34, 25, 12, 22, 11, 90};
        bubbleSort(array);
        for (int num : array) {
            System.out.print(num + " ");
        }
    }
}

在这里插入图片描述

7.2 数组工具类

// 数组转字符串
String str = Arrays.toString(arr);

// 数组填充
Arrays.fill(arr, 0);  // 全部填充为0

总结

数组作为Java中的基础数据结构,具有以下特点:

  1. 存储相同类型元素的集合
  2. 内存空间连续,支持随机访问
  3. 长度固定,初始化后不可改变
  4. 作为引用类型,需要注意深浅拷贝问题

掌握数组的各种操作和特性,是Java编程的重要基础。在实际开发中,应根据需求选择合适的数组操作方式,并注意避免常见的数组越界等问题。

在这里插入图片描述
JavaSE往期专栏

  • Java从入门到“放弃”(精通)之旅——启航①
  • Java从入门到“放弃”(精通)之旅——数据类型与变量②
  • Java从入门到“放弃”(精通)之旅——运算符③
  • Java从入门到“放弃”(精通)之旅——程序逻辑控制④
  • Java从入门到“放弃”(精通)之旅——方法的使用⑤
    在这里插入图片描述

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

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

相关文章

如何对docker镜像存在的gosu安全漏洞进行修复——筑梦之路

这里以mysql的官方镜像为例进行说明&#xff0c;主要流程为&#xff1a; 1. 分析镜像存在的安全漏洞具体是什么 2. 根据分析结果有针对性地进行修复处理 3. 基于当前镜像进行修复安全漏洞并复核验证 # 镜像地址mysql:8.0.42 安全漏洞现状分析 dockerhub网站上获取该镜像的…

基于springboot的老年医疗保健系统

博主介绍&#xff1a;java高级开发&#xff0c;从事互联网行业六年&#xff0c;熟悉各种主流语言&#xff0c;精通java、python、php、爬虫、web开发&#xff0c;已经做了六年的毕业设计程序开发&#xff0c;开发过上千套毕业设计程序&#xff0c;没有什么华丽的语言&#xff0…

使用Ollama本地运行deepseek模型

Ollama 是一个用于管理 AI 模型的工具 下载 Ollama Ollama 选择版本 下载模型 安装好后&#xff0c;下载模型 选择模型 选择模型大小&#xff0c;复制对应命令&#xff08;越大越聪明&#xff0c;但是内存要求越高&#xff09; 打开控制台运行命令&#xff0c;第一次运行会自动…

网络编程 - 3

目录 UDP 连接拓展&#xff08;业务逻辑&#xff09; 词典服务器实现 完 UDP 连接拓展&#xff08;业务逻辑&#xff09; 我们上一篇文章实现了一个回显服务器&#xff0c;在服务端中业务方法 process 中&#xff0c;只是单纯的将客户端输入的东西 return 了一下&#xff0…

5G 毫米波滤波器的最优选择是什么?

新的选择有很多&#xff0c;但到目前为止还没有明确的赢家。 蜂窝电话技术利用大量的带带&#xff0c;为移动用途提供不断增加的带宽。 其中的每一个频带都需要透过滤波器将信号与其他频带分开&#xff0c;但目前用于手机的滤波器技术可能无法扩展到5G所规划的全部毫米波&#…

【HDFS入门】HDFS性能调优实战:压缩与编码技术深度解析

目录 1 HDFS性能调优概述 2 HDFS压缩技术原理与应用 2.1 常见压缩算法比较 2.2 压缩流程架构 2.3 压缩配置实践 3 列式存储编码技术 3.1 ORC与Parquet对比 3.2 ORC文件结构 3.3 Parquet编码流程 4 性能调优实战建议 4.1 压缩选择策略 4.2 编码优化技巧 5 性能测试…

如何在 IntelliJ IDEA 中安装通义灵码 - AI编程助手提升开发效率

随着人工智能技术的飞速发展&#xff0c;AI 编程助手已成为提升开发效率和代码质量的强大工具。在众多 AI 编程助手之中&#xff0c;阿里云推出的通义灵码凭借其智能代码补全、代码解释、生成单元测试等丰富功能&#xff0c;脱颖而出&#xff0c;为开发者带来了全新的编程体验。…

从零到一:管理系统设计新手如何快速上手?

管理系统设计是一项复杂而富有挑战性的任务&#xff0c;它要求设计者具备多方面的知识和技能&#xff0c;包括需求分析、架构设计、数据管理、用户界面设计等。对于初次接触这一领域的新手而言&#xff0c;如何快速上手并成为一名合格的管理系统设计者呢&#xff1f;本文将从管…

WSL (ext4.vhdx文件)占用空间过大,清理方式记录,同时更改 WSL 保存位置

一、问题 之前使用 WSL Ubuntu 进行过开发板的 Yocto 项目编译&#xff0c;占用空间达到了 70GB 多的空间。后来进行了项目迁移&#xff0c;删除了 WSL 中的所有文件&#xff0c;但是从 Windows 查看空间占用却没有减少&#xff1a; 占用依然是 70 多&#xff0c;查阅发现 vhdx…

《软件设计师》复习笔记(14.2)——统一建模语言UML、事务关系图

目录 1. UML概述 2. UML构造块 (1) 事物&#xff08;Things&#xff09; (2) 关系&#xff08;Relationships&#xff09; 真题示例&#xff1a; 3. UML图分类 (1) 结构图&#xff08;静态&#xff09; (2) 行为图&#xff08;动态&#xff09; 4. 核心UML图详解 5.…

[文献阅读] EnCodec - High Fidelity Neural Audio Compression

[文献信息]&#xff1a;[2210.13438] High Fidelity Neural Audio Compression facebook团队提出的一个用于高质量音频高效压缩的模型&#xff0c;称为EnCodec。Encodec是VALL-E的重要前置工作&#xff0c;正是Encodec的压缩量化使得VALL-E能够出现&#xff0c;把语音领域带向大…

【操作系统原理01】操作系统引论

文章目录 大纲一、中断与异常0.大纲1. 中断的作用2. 中断类型2.1 内中断2.2 外中断2.3 判断内外中断 3. 中断机制原理 二、系统调用0. 大纲1.什么是系统调用2.系统调用分类 三、操作性系统内核(了解)0.大纲1.内核2.各种操作系统结构特性 四、操作系统引论0.大纲1.磁盘存储 图片…

最新得物小程序sign签名加密,请求参数解密,响应数据解密逆向分析

点击精选&#xff0c;出现https://app.dewu.com/api/v1/h5/index/fire/index 这个请求 直接搜索sign的话不容易定位 直接搜newAdvForH5就一个&#xff0c;进去再搜sign&#xff0c;打上断点 可以看到t.params就是没有sign的请求参数&#xff0c; 经过Object(a.default)该函数…

Day2—3:前端项目uniapp壁纸实战

接下来我们做一个专题精选 <view class"theme"><common-title><template #name>专题精选</template><template #custom><navigator url"" class"more">More</navigator></template></common…

Python基于知识图谱的医疗问答系统【附源码、文档说明】

博主介绍&#xff1a;✌Java老徐、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&…

股指期货跨期套利是如何赚取价差利润的?

股指期货跨期套利&#xff0c;简单来说&#xff0c;就是在同一交易所内&#xff0c;针对同一股指期货品种的不同交割月份合约进行的套利交易。投资者会同时买入某一月份的股指期货合约&#xff0c;并卖出另一月份的股指期货合约&#xff0c;待未来某个时间点&#xff0c;再将这…

w297毕业生实习与就业管理系统

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

Java集合框架中的List、Map、Set详解

在Java开发中&#xff0c;集合框架是处理数据时不可或缺的工具之一。今天&#xff0c;我们来深入了解一下Java集合框架中的List、Map和Set&#xff0c;并探讨它们的常见方法操作。 目录 一、List集合 1.1 List集合介绍 1.2 List集合的常见方法 添加元素 获取元素 修改元素…

OpenStack Yoga版安装笔记(23)Swift安装

一、官方文档 Object Storage Install Guide — Swift 2.29.3.dev5 documentation 二、环境准备 之前的实验&#xff0c;已经有controller, compute1, block1节点&#xff0c;并已经完成Keystone、Glance、Nova、Neutron、Cinder等主要OpenStack Service的安装。 此处新增…

MRO 工业品电商系统:智能精准匹配,快速满足采购需求

在竞争激烈的工业领域&#xff0c;企业对 MRO 工业品的采购需求越来越多。但传统 MRO 采购存在信息不透明、客户选型困难&#xff0c;流程复杂处理周期长、库存信息不明确、成本高和客户价格管理混乱等诸多问题。随着电商发展&#xff0c;MRO 工业品电商系统出现&#xff0c;给…