当前位置:

首页 > 编程开发 > Java基础指南之Arrays数组声明创建和基础操作详解

Java基础指南之Arrays数组声明创建和基础操作详解

数组是Java中存储固定大小、同类型元素的容器,元素在内存中连续排列,访问速度快。声明方式为type[]arrayName,创建可用直接初始化、new关键字或Arrays.copyOf方法。通过索引访问元素,索引从0开始。遍历可用for循环或增强for循环。多维数组是数组的数组,常用二维数组和更高维度。Arrays工具类提供sort等实用方法。

本文目录

    数组是Ja va里非常基础但也极其重要的一个概念。简单来说,它就是一个用来存储固定大小、同类型元素的“容器”。这些元素在内存中连续排列,访问起来速度极快——这也是它最核心的优势之一。

    Ja va基础指南之Arrays数组声明创建和基础操作详解

    那么,数组究竟有什么与众不同的特性?

    • 固定大小:数组一旦创建,长度就不可改变。有点像预订好的座位,坐满了就不能再加人。
    • 连续内存:元素在内存里紧挨着存放,访问时通过首地址加偏移量一步到位,性能极高。但劣势也很明显——创建大数组时,需要一次性申请一整块连续内存,如果内存碎片较多,可能申请失败。
    • 同类型元素:数组中所有元素必须是相同数据类型,要么都是基本类型,要么都是对象类型。这样做保证了内存布局的规整和访问的确定性。

    数组的声明和创建

    声明数组

    声明数组的语法很直观:

    type[] arrayName;
    • type:元素的数据类型,可以是基本类型(如int、double)或引用类型(如String、自定义类)。
    • arrayName:数组名称,遵循标识符命名规则。

    创建数组

    创建数组有好几种方式,看场景选最顺手的那种就行。

    声明时直接初始化:

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

    使用new关键字分配内存:

    int[] numbers = new int[5]; // 创建一个长度为5的整数数组,所有元素默认初始化为0

    使用数组工厂方法(Ja va 8及以上):

    int[] numbers = Arrays.copyOf(new int[]{1, 2, 3, 4, 5}, 5);

    需要注意,用new int[5]创建时,元素会被赋予默认值——基本类型(如int是0,boolean是false),引用类型是null。

    获取数组长度

    数组没有length()方法,而是直接提供一个.length属性:

    int[] numbers = {100, 200, 300, 400, 500};
    int arraySize = numbers.length;
    System.out.println("numbers的长度是: " + arraySize); // 输出: numbers的长度是: 5

    这一点和字符串的length()方法不同,初学者容易搞混,稍微留意一下就好。

    访问数组元素

    通过索引访问元素,索引从0开始,到length-1结束。访问越界会抛出ArrayIndexOutOfBoundsException:

    int[] numbers = {100, 200, 300, 400, 500};
    int firstElement = numbers[0];
    System.out.println("numbers的第一个元素: " + firstElement); // 100
    int lastElement = numbers[numbers.length - 1];
    System.out.println("numbers的最后一个元素: " + lastElement); // 500

    遍历数组

    遍历数组通常有两种方式,各自有适合的场合。

    for循环:适合需要访问索引或修改元素的场景。

    int[] numbers = {100, 200, 300, 400, 500};
    for (int i = 0; i < numbers.length; i++) {
        System.out.println("索引 "+i+"的元素: "+numbers[i]);
    }

    增强for循环(也叫for-each):写法简洁,不需要索引变量,适合只读遍历。

    for (int number : numbers) {
        System.out.println(number);
    }

    多维数组

    多维数组本质上就是“数组的数组”。比如二维数组可以理解为一个表格,每一行是一个一维数组,所有行组成了二维数组。它在矩阵运算、棋盘游戏、图像处理等场景中非常常见。

    二维数组

    定义和初始化二维数组:

    // 定义并初始化一个3行4列的整型二维数组
    int[][] numbers = new int[3][4];
    
    // 直接初始化二维数组
    int[][] initializedNumbers = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12}
    };
    
    // 或者先分配行数,再逐行分配(每一行的列数可以不同)
    int[][] mixedInitialization = new int[3][];
    mixedInitialization[0] = new int[]{1, 2, 3, 4};
    mixedInitialization[1] = new int[]{5, 6, 7, 8};
    mixedInitialization[2] = new int[]{9, 10, 11, 12};

    访问二维数组元素:

    int[][] numbers = {
        {1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12}
    };
    int value = numbers[1][2]; // 获取第二行第三列的值
    numbers[0][0] = 100;       // 改变第一行第一列的值

    遍历二维数组:需要嵌套循环。外层行、内层列,一一处理。

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

    更高维度数组

    原理完全一样,只是维度更多。比如三维数组可以想象成一组二维数组堆叠起来:

    int[][][] threeDimensionalArray = new int[3][3][3];
    threeDimensionalArray[0][1][2] = 100;
    int value3D = threeDimensionalArray[0][1][2];

    数组相关方法(Arrays工具类)

    ja va.util.Arrays是Ja va标准库中专门为数组服务的工具类,封装了大量实用操作。以下是最常用的几个方法:

    数组排序

    sort():对一维数组进行升序排序。

    int[] unsortedArray = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
    Arrays.sort(unsortedArray);

    如果需要对对象数组按自定义规则排序,可以使用重载版本:sort(T[] array, Comparator c)。

    填充方法

    fill():把指定值填充到数组的所有元素或部分元素。

    int[] arr = new int[5];
    Arrays.fill(arr, 9); // 全部设为9

    比较方法

    equals():比较两个一维数组是否相等(元素相同且顺序一致)。

    int[] numbers1 = {100, 200, 300, 400, 500};
    int[] numbers2 = {100, 200, 300, 400, 500};
    boolean arraysEqual = Arrays.equals(numbers1, numbers2); // true

    deepEquals():用于对象数组或嵌套数组的深度比较,不仅仅是引用比较。

    搜索方法

    binarySearch():在已排序的数组中使用二分查找,返回目标元素的索引。如果没找到,返回负数。

    int[] unsortedArray = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3};
    int index = Arrays.binarySearch(unsortedArray, 5); // 注意:使用前最好先排序

    转换方法

    asList():将数组转换为List视图,但这个List是固定大小的,不能增删元素。

    String[] stringArray = {"首页", "新闻", "关于我们", "联系我们"};
    List list = Arrays.asList(stringArray);

    复制方法

    copyOf() 和 copyOfRange():复制数组的一部分或全部。

    int[] numbers = {100, 200, 300, 400, 500};
    int[] copiedArray = Arrays.copyOf(numbers, numbers.length);
    System.out.println(Arrays.toString(copiedArray)); // [100, 200, 300, 400, 500]
    
    String[] objectArray = {"A", "B", "C", "D", "E", "F", "G"};
    String[] clonedStringArray = Arrays.copyOfRange(objectArray, 0, 4);
    System.out.println(Arrays.toString(clonedStringArray)); // [A, B, C, D]

    需要留意的是,copyOf()对于基本类型数组是深拷贝,但对于对象数组只复制引用,并不复制对象本身。如果需要真正的深拷贝,需要自己实现或借助序列化等手段。

    打印数组

    toString():把数组转换成易读的字符串格式,非常适合调试。

    int[] numbers = {100, 200, 300, 400, 500};
    System.out.println(Arrays.toString(numbers)); // [100, 200, 300, 400, 500]

    总结一下:数组在Ja va中的地位就像基石,虽然简单但应用极广。尤其是在性能敏感的场景下,数组的连续内存访问特性是ArrayList等容器无法完全替代的。掌握好它的声明、创建、遍历以及工具类的使用,后续学习集合框架会轻松很多。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    编程开发
    相关文章 更多
    码上飞电脑版快速访问:官方书签与网页入口管理
    码上飞电脑版快速访问:官方书签与网页入口管理

    码上飞电脑版可把https://www.codeflying.net/保存为Chrome书签,通过书签栏或管理器直接访问。本文演示添加书签、文件夹与单项管理,并说明起始页面的可选设置、旧链接检查和登录限制,避免把访问快捷方式误认为自动登录。

    码上飞登录反复失效怎么办:站点数据与会话检查
    码上飞登录反复失效怎么办:站点数据与会话检查

    码上飞登录反复失效时,先确认账号验证完成,并检查浏览器是否限制网站数据或退出时自动删除。本文按第三方Cookie、站点例外、设备端数据和单站清理的顺序排查,说明清理会退出账号及删除离线数据,适用于电脑Chrome。

    码上飞网页空白怎么办:浏览器脚本与站点权限排查
    码上飞网页空白怎么办:浏览器脚本与站点权限排查

    码上飞网页空白先检查网址、网络和刷新结果,再依次核对Chrome的JavaScript、站点权限与扩展拦截。本文给出当前中文设置路径、仅为官网设例外的方法,以及图片缺失和浏览器版本检查,避免一开始就清除全部数据或重置浏览器。

    码上飞帮助文档怎么进入:官方教程与问题查找
    码上飞帮助文档怎么进入:官方教程与问题查找

    码上飞帮助文档可从官网顶部或首页底部的帮助文档进入,官方链接指向码上飞帮助中心。本文说明如何按新手入门、常见问题及部署相关主题定位内容,区分文档平台登录与码上飞账号,并提供入口打不开时的处理方法。

    码上飞我的权益在哪里查看:额度与会员信息核对
    码上飞我的权益在哪里查看:额度与会员信息核对

    码上飞我的权益位于工作区侧栏,个人额度需在正确账号下查看;首页定价用于对比公开会员方案。本文区分会员能力、积分与邀请奖励,说明如何查看奖励记录及有效期,避免把公开套餐、默认数字或邀请列表当作本人权益已到账。

    码上飞账号设置与账单入口:如何核对真实登录状态
    码上飞账号设置与账单入口:如何核对真实登录状态

    码上飞账号设置与账单从工作区侧栏的设置和账单进入,账单、API服务与积分明细用途不同。本文说明如何核对本人身份、识别公开页面的默认显示,以及查看明细时应注意的字段,避免把空记录或默认积分当成真实账户结果。

    码上飞我的应用在哪里:搜索与发布状态筛选
    码上飞我的应用在哪里:搜索与发布状态筛选

    码上飞我的应用位于工作区侧栏,进入后可按全部、已发布、未发布筛选,并通过搜索应用查找项目。本文说明空列表的判断顺序、账号核对和筛选恢复方法,避免把未登录或筛选无结果误认为项目删除,适用于电脑网页。

    码上飞如何创建新应用:从需求描述进入开发流程
    码上飞如何创建新应用:从需求描述进入开发流程

    码上飞创建新应用可从工作区侧栏进入创建新应用,在需求框写清目标、使用者、数据和主要操作,再检查账号与额度后点击立即开发。本文说明如何组织首轮需求、区分新建与继续已有项目,以及未登录或按钮不可用时的处理。

    码上飞应用广场怎么用:分类筛选与案例预览
    码上飞应用广场怎么用:分类筛选与案例预览

    码上飞应用广场可从官网/my-home进入,先按用途选择分类,再用应用名称或功能关键词搜索。本文说明个人工具、企业服务、记账类结果和无结果状态的区别,以及预览、复制与个人应用归属的边界,适用于电脑网页端。

    码上飞邮箱注册教程:密码要求与首次验证流程
    码上飞邮箱注册教程:密码要求与首次验证流程

    码上飞邮箱注册从官网/register进入,填写本人邮箱、符合要求的密码和确认密码后,按继续进入后续验证。本文核对当前密码长度与组合条件,说明首次验证的完成判断、与手机号登录的区别,以及表单不能继续时的检查方法。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。