Java数组详解 -- 基础知识与常用操作

文章目录

  • 前言
  • 一、初识数组
    • 1. 数组的定义
    • 2. 数组的特点
    • 3. 声明和初始化数组
    • 4. 默认初始化值
  • 二、访问和操作数组元素
    • 1. 数组的索引和范围
    • 2. 通过索引访问数组元素
    • 3. 修改数组元素的值
  • 三、数组的长度和属性
    • 1. 数组的长度计算
    • 2. 数组的长度属性
    • 3. 数组越界的错误
  • 四、数组的遍历
    • 1. for循环遍历数组
    • 2. 增强for循环遍历数组
    • 3. 遍历多维数组
  • 五、多维数组
    • 1. 二维数组的定义和初始化
    • 2. 访问和操作二维数组元素
  • 六、数组的注意事项和扩展
    • 1. 数组长度的不可变性
    • 2. 数组的复制和排序
    • 3. 数组的查找
    • 4. 动态数组的实现:ArrayList
  • 总结


前言

为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。当然,如果能帮到一些萌新进行新技术的学习那也是极好的。作者菜菜一枚,文章中如果有记录错误,欢迎读者朋友们批评指正。
(博客的参考源码以及可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)

一、初识数组

数组是一种可以容纳多个相同类型数据元素的数据结构。它是Java编程中常用的数据类型,用于存储和操作一组数据。数组提供了一个连续的内存空间来存储多个元素,并通过索引来访问和操作其中的每个元素。

1. 数组的定义

在Java中,可以使用以下语法来定义一个数组:

  dataType[] arrayName;

其中,dataType表示数组中元素的数据类型,arrayName是数组的名称。

2. 数组的特点

1. 数组具有以下特点:

  • 数组长度固定:一旦数组被创建,其长度就是固定的,无法动态改变
  • .存储相同类型的数据:数组中的元素必须是相同类型的数据
  • 连续的内存空间:数组中的元素在内存中是连续存储的,可以通过索引快速访问

在这里插入图片描述

  • 正是因为数组的在内存空间的地址是连续的,所以我们在删除或者增添元素的时候,就难免要移动其他元素的地址。例如删除下标为3的元素,如图所示:

在这里插入图片描述

  • 数组的元素是不能删除的,只能覆盖

3. 声明和初始化数组

1. 声明数组的语法

要声明一个数组,可以使用以下语句:

  dataType[] arrayName;

其中,dataType是数组中元素的数据类型,arrayName是数组的名称。

2. 静态初始化和动态初始化

在声明数组的同时,可以进行初始化操作。数组的初始化可以分为静态初始化和动态初始化两种方式。

  • 静态初始化

静态初始化是指在声明数组的同时,为数组元素赋初值。可以使用以下语法进行静态初始化:

  dataType[] arrayName = {element1, element2, ...};

其中,dataType是数组中元素的数据类型,arrayName是数组的名称,element1, element2, …是要赋给数组元素的值。

  • 动态初始化

动态初始化是指在声明数组后,再为数组分配内存空间,并为数组元素赋初值。可以使用以下语法进行动态初始化:

  dataType[] arrayName = new dataType[arrayLength];

其中,dataType是数组中元素的数据类型,arrayName是数组的名称,arrayLength是数组的长度,表示可以存储的元素个数。

4. 默认初始化值

在Java中,如果没有为数组中的元素赋初值,那么数组会自动进行默认初始化,根据数据类型不同采用不同的默认值。下面是一些常见数据类型的默认初始化值:

  • int类型的数组,默认元素值为 0
  • double类型的数组,默认元素值为 0.0
  • boolean类型的数组,默认元素值为 false
  • char类型的数组,默认元素值为空字符 \u0000

二、访问和操作数组元素

1. 数组的索引和范围

数组中的每个元素都通过一个非负整数索引来访问。索引从 0 开始,依次递增。例如,第一个元素的索引为 0,第二个元素的索引为 1,以此类推。数组的长度为 n,则有效索引范围为 0 到 n - 1

2. 通过索引访问数组元素

要访问数组中的元素,可以使用以下语法:

  arrayName[index]

其中,arrayName是数组的名称,index是要访问的元素的索引。通过该语法可以获取数组中指定索引位置的元素值。

3. 修改数组元素的值

通过索引访问数组元素后,还可以对该元素进行赋值操作,从而修改元素的值。使用以下语法来修改数组元素的值:

  arrayName[index] = newValue;

其中,arrayName是数组的名称,index是要修改的元素的索引,newValue是要赋给该元素的新值。

三、数组的长度和属性

1. 数组的长度计算

通过使用 length 属性,可以获取数组的长度。长度表示数组中元素的个数,而非数组占用的内存空间大小。要获取数组的长度,可以使用以下语法:

  int length = arrayName.length;

其中,arrayName是数组的名称,length是用于存储数组长度的变量。

2. 数组的长度属性

数组的长度是在创建数组时指定的,一旦创建后,长度就是固定的。使用length属性可以获取数组的长度值,常用于遍历数组或检查数组是否越界。

3. 数组越界的错误

在访问数组元素时,需要确保所使用的索引在有效范围内,否则会发生数组越界的错误。如果索引小于0或大于等于数组长度,都会导致数组越界错误。在编写代码时,应格外注意数组索引的范围

四、数组的遍历

数组的遍历是指依次访问数组中的每个元素。遍历数组可以通过循环结构实现,常见的有for循环和增强for循环

1. for循环遍历数组

for (int i = 0; i < arrayName.length; i++) {// 访问数组元素:arrayName[i]// 执行其他操作
}

在for循环中,使用一个循环变量i来作为索引,从 0 开始逐渐增加,直到达到数组长度减 1 为止。该方法适用于需要根据索引进行操作的情况。

2. 增强for循环遍历数组

for (dataType element : arrayName) {// 访问数组元素:element// 执行其他操作
}

增强 for 循环是Java 5中引入的一种遍历数组的简化方法。它可以直接遍历数组中的每个元素,不需要使用索引变量。该方法适用于只需要访问数组元素而不需要索引的情况。

3. 遍历多维数组

遍历多维数组可以嵌套使用多个循环,每层循环负责遍历一维数组的元素。

for (int i = 0; i < arrayName.length; i++) {for (int j = 0; j < arrayName[i].length; j++) {// 访问数组元素:arrayName[i][j]// 执行其他操作}
}

通过嵌套的循环,可以依次遍历每个二维数组的元素。

五、多维数组

多维数组是指包含多个一维数组的数组。例如,二维数组是一种常见的多维数组,它包含多个一维数组作为其元素。

1. 二维数组的定义和初始化

在Java中,可以使用以下语法来定义二维数组:

  dataType[][] arrayName = new dataType[rowLength][columnLength];

其中,dataType是二维数组中元素的数据类型,arrayName是二维数组的名称,rowLength表示二维数组的行数,columnLength表示二维数组的列数。

二维数组的初始化可以通过静态初始化和动态初始化两种方式,与一维数组类似。

2. 访问和操作二维数组元素

要访问二维数组中的元素,可以使用以下语法:

  arrayName[rowIndex][columnIndex]

其中,arrayName是二维数组的名称,rowIndex是要访问的元素所在行的索引,columnIndex是要访问的元素所在列的索引。

可以通过修改二维数组元素的值,来操作二维数组。与一维数组类似,使用以下语法来修改二维数组的元素值:

  arrayName[rowIndex][columnIndex] = newValue;

六、数组的注意事项和扩展

1. 数组长度的不可变性

数组一旦创建后,其长度就是固定的,无法动态改变。如果需要存储更多的元素,可以考虑使用动态数组或集合类。

2. 数组的复制和排序

  • 可以使用 System.arraycopy() 方法或 Arrays.copyOf() 方法来复制数组

使用 System.arraycopy() 方法:

int[] sourceArray = {1, 2, 3, 4, 5};
int[] targetArray = new int[sourceArray.length];System.arraycopy(sourceArray, 0, targetArray, 0, sourceArray.length);

使用 Arrays.copyOf() 方法:

int[] sourceArray = {1, 2, 3, 4, 5};
int[] targetArray = Arrays.copyOf(sourceArray, sourceArray.length);
  • 可利用Arrays.sort() 方法对数组进行 排序
 // 使用 Arrays.sort() 方法对数组进行排序Arrays.sort(numbers);
}

3. 数组的查找

通过 binarySearch 方法能对排序好的数组进行二分查找法操作

import java.util.Arrays;public class BinarySearchExample {public static void main(String[] args) {// 示例数组,必须为已排序的数组int[] array = {10, 20, 30, 40, 50, 60, 70};int key = 40;int index = Arrays.binarySearch(array, key);
}

4. 动态数组的实现:ArrayList

在Java中,除了使用数组外,还可以使用 ArrayLis t类来实现动态数组。ArrayList 可以自动调整长度,并提供了丰富的方法来操作和管理元素。(详情请到个人主页查看关于ArrayList的入门博客)

总结

欢迎各位留言交流以及批评指正,如果文章对您有帮助或者觉得作者写的还不错可以点一下关注,点赞,收藏支持一下。
(博客的参考源码可以在我主页的资源里找到,如果在学习的过程中有什么疑问欢迎大家在评论区向我提出)

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

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

相关文章

倒计时 1 天!浙江大学、乘云数字、阿里云等多位技术专家教授解读最新运维技术

莫听监控繁杂声,何妨观测且徐行; 智能诊断快胜马,一键运维定乾坤。 各位朋友们,距离系统运维 MeetUp 开始只剩 2 天!此次 MeetUp 将围绕 Linux 的应用和系统可观测,eBPF 跟踪以及诊断技术等系统运维热门话…

leetcode 96. 不同的二叉搜索树

2023.8.10 本题可以先在草稿上画出各种不同的二叉搜索树,从中寻找规律,找出递推关系: 例如:当n3时,分三种情况: ①1作为根节点,此时左子树有0个节点,右子树有2两个节点,…

Element-Plus DatePicker获取时间戳

文章目录 0、先上答案1、渔&#xff1f;1-1 Element-Plus 官网1-2 溯源 Day.js 0、先上答案 <!-- 秒 --><el-date-pickerv-model"timeStamp"type"datetime"value-format"X"/><!-- 毫秒 --><el-date-pickerv-model"tim…

白帽黑帽与linux安全操作

目录 白帽黑帽 Linux安全 白帽黑帽 白帽&#xff08;White Hat&#xff09;和黑帽&#xff08;Black Hat&#xff09;通常用于描述计算机安全领域中的两种不同角色。白帽黑客通常被认为是合法的安全专家&#xff0c;他们通过合法途径寻找和修复安全漏洞&#xff0c;帮助企业和…

c语言每日一练(5)

前言&#xff1a;每日一练系列&#xff0c;每一期都包含5道选择题&#xff0c;2道编程题&#xff0c;博主会尽可能详细地进行讲解&#xff0c;令初学者也能听的清晰。每日一练系列会持续更新&#xff0c;暑假时三天之内必有一更&#xff0c;到了开学之后&#xff0c;将看学业情…

腾讯云轻量应用服务器CPU配置?主频性能

腾讯云轻量应用服务器CPU型号是什么&#xff1f;处理器主频多少&#xff1f;轻量应用服务器不支持指定CPU处理器型号&#xff0c;目前腾讯云服务器网账号下的轻量应用服务器&#xff0c;CPU采用2.5GHz主频的Intel(R) Xeon(R) Gold 6133 处理器&#xff0c;睿频 3.0GHz&#xff…

电脑怎么查看连接过的WIFI密码(测试环境win11,win10也能用)

电脑怎么查看连接过的WIFI密码 方法一&#xff1a;适用于正在连接的WIFI密码的查看 打开设置 点击“网络和Internet”&#xff0c;在下面找到“高级网络设置”点进去 在下面找到 “更多网络适配器选项” 点进去 找到 WLAN &#xff0c;然后双击它 5.然后点击“无线属性” 6.…

使用go-zero快速构建微服务

本文是对 使用go-zero快速构建微服务[1]的亲手实践 编写API Gateway代码 mkdir bookstore && cd bookstorego mod init bookstore mkdir api && goctl api -o api/bookstore.api syntax "v1"info(title: "xx使用go-zero"desc: "xx用…

嵌入式Linux下LVGL的移植与配置

一.sdk源码下载路径 1.官方源码下载路径如下: ​​​​​​ https://github.com/lvgl/lvgl git下载方式 git clone https://github.com/lvgl/lvgl.git 2.个人移植好的源码8.2版本下载路径: 链接&#xff1a;https://pan.baidu.com/s/1jyqIennsQpv-RB4RyKvZyg?pwdc68e 提取…

在线Word怎么转换成PDF?Word无法转换成PDF文档原因分析

不同的文件格式使用方法是不一样的&#xff0c;而且也需要使用不同的工具才可以打开编辑内容&#xff0c;针对不同的场合用户们难免会用到各种各样的文件格式&#xff0c;要想在不修改内容的前提下提高工作效率&#xff0c;那就需要用到文件格式转换&#xff0c;那么在线Word怎…

Glide 的超时控制相关处理

作者&#xff1a;newki 前言 Glide 相信大家都不陌生&#xff0c;各种源码分析&#xff0c;使用介绍大家应该都是烂熟于心。但是设置 Glide 的超时问题大家遇到过没有。 我遇到了&#xff0c;并且掉坑里了&#xff0c;情况是这样的。 调用接口从网络拉取用户头像&#xff0c…

Shopify平台Fulfillment业务模块升级

上图是销售订单、发货单与配送之间的关系图&#xff0c;销售订单可以创建多个发货单&#xff0c;多个发货单(不同销售订单)可以合并在一个配送订单进行发货 接口请求错误记录: 1. The api_client does not have the required permission(s). 2. Required parameter missing or…