JavaSE之数组

简介: JavaSE之数组

💕十年生死两茫茫,不思量,自难忘💕

作者:Mylvzi

文章主要内容:Java学习之--数组

一.数组的基本概念

1.定义

数组是相同数据类型的集合!使用数组来存放多个相同类型的数据!

2.Java中定义数组的方式

// 通过new关键字定义一个数组
        int[] arr1= new int[10];
        int[] arr2 = {1,2,3,4,5};

注意:Java中定义数组的方式和C语言不同,Java中将数组名放在最后,前面是数组类型,这样定义更符合利用数据类型定义变量的方法!

3.Java中如果不给数组赋初始值,系统会自动赋默认值

如果是引用类型会赋值为null

4.再次深入理解引用类型!

       数组是一种引用类型,数组名就是通过引用类型创建的引用变量!引用变量存在于栈区,存放的是数组的地址!而数组本身是在堆上开辟的!下面通过两个代码来详细讲解!

public static void func(int[] a) {
        a[0] = 10;
        System.out.println("a[0] = " + a[0]);// 输出10
    }
    public static void main(String[] args) {
        int[] arr = {1, 2, 3};
        func(arr);
        System.out.println("arr[0] = " + arr[0]);// 输出10
}

public static void func() {
        int[] array1 = new int[3];
        array1[0] = 10;
        array1[1] = 20;
        array1[2] = 30;
        int[] array2 = new int[]{1,2,3,4,5};
        array2[0] = 100;
        array2[1] = 200;
        array1 = array2;
        array1[2] = 300;
        array1[3] = 400;
        array2[4] = 500;
        for (int i = 0; i < array2.length; i++) {
            System.out.println(array2[i]);// 输出100 200 300 400 500
        }
    }

对象一定是在堆上的!但引用变量不一定在栈上

二.数组的基本操作

1.自动获得数组长度

// 利用数组方法获取长度
        int[] arr1 = new int[10];
        System.out.println(arr1.length);// 输出10
        char[] arr2 = new char[8];
        System.out.println(arr2.length);// 输出8

2.for循环遍历数组(两种方式)

// for循环打印数组
        int[] arr1 = {1,2,3,4,5};
        for (int i = 0; i <arr1.length ; i++) {
            System.out.println(arr1[i]);
        }
        // foreach循环打印数组-->也被称为加强for循环
        // 只能打印数组,无法拿到下标
        for (int x:arr1) {
            System.out.println(x);
        }

3.Arrays方法之将数组以字符串的形式输出

Arrays方法是Java中重要的一种方法,用来对数组进行操作!

// Arrays.toString以字符串的形式打印数组
        int[] arr1 = {1,2,3,4,5};
        char[] arr2 = {'a','b','c'};
        String[] arr3 = {"hello world!"};
        System.out.println(Arrays.toString(arr1));
        System.out.println(Arrays.toString(arr2));
        System.out.println(Arrays.toString(arr3));

4.Arrays方法之数组的拷贝

// 数组的复制
        int[] arr1 = new int[10];//原数组   新数组的长度
        int[] arr2 = Arrays.copyOf(arr1,arr1.length);
        int[] arr3 = Arrays.copyOf(arr1,arr1.length*2);
        System.out.println(Arrays.toString(arr1));
        System.out.println(Arrays.toString(arr2));
        System.out.println(Arrays.toString(arr3));

注意:还可以利用数组的拷贝实现对原数组的增删数据

// 可以利用数组的复制实现对原数组增删数据
        int[] arr1 = {1,2,3,4,5};
        System.out.println(Arrays.toString(arr1));
        arr1 = Arrays.copyOf(arr1,arr1.length-1);// 删除原数组最后一个元素
        System.out.println(Arrays.toString(arr1));
        int[] arr2 = {1,2,3,4,5};
        arr2 = Arrays.copyOf(arr2,arr2.length+1);// 为原数组增添一个元素
        System.out.println(Arrays.toString(arr2));

还有一种简单的复制数组的方法arr.clone

int[] arr1 = {1,2,3,4,5};
        int[] arr2 =arr1.clone();
        System.out.println("复制后的数组:"+Arrays.toString(arr2));
        // 输出:1 2 3 4 5

5.判断两个数组是否相等

int[] arr1 = {1,2,3,4,5};
        int[] arr2 =arr1.clone();
        // 调用方法
        boolean isEqual = Arrays.equals(arr1,arr2);
        System.out.println(isEqual);// 输出true

6.判断数组是否为空

int[] arr1 = {1,2,3,4,5};
        int[] arr2 =arr1.clone();
        // 判断是否为空
        boolean isEmpty = arr1.length == 0;// 类似于三目运算符的逻辑
        System.out.println(isEmpty);

7.填充数字

int[] arr1 = new int[10];
        // 填充数组
        Arrays.fill(arr1,5);
        System.out.println(Arrays.toString(arr1));

在指定范围内填充

Java中的from to是左闭右开

8.对数组进行升序排序

int[] arr = {23,14,999,33,1};
        // 对原数组进行升序排序
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
        // 输出:1  14  23  33  999

9.二分查找!

int[] arr = {23,14,999,33,1};
        // 注意二分查找只适用于有序数组
        Arrays.sort(arr);
        int i = Arrays.binarySearch(arr,999);
        System.out.println(i);// 输出4

10.作为函数的返回值!!!

C语言中数组无法作为函数的返回值,而Java中可以返回数组;

以斐波那契数列为例

// 返回数组的函数
    public static int[] fib(int x) {
        int[] arr = new int[x];
        arr[0] = arr[1] = 1;
        for (int i = 2; i <x ; i++) {
            arr[i] = arr[i-1] +arr[i-2];
        }
        return arr;
    }
    public static void main(String[] args) {
        int[] arr= fib(10);
        System.out.println(Arrays.toString(arr));

三.二维数组

1.二维数组的初始化

注意在Java中不能省略行数,列数可以省略(和C语言相反)

int[][] arr1 = new int[10][];
        int[][] arr2 = new int[][10];// err  java中二维数组的列不能省去行
        int[][] arr3 = {{1,2,3},{2,3,4},{3,4,5}};

2.二维数组的打印

 二维数组是一维数组的数组,从这个方面理解可以获取它的行数和列数

int[][] arr1 = {{1,2,3},{2,3,4}};// 定义一个两行三列的二维数组
        for (int i = 0; i < arr1.length ; i++) {// 二维数组名.length代表行数
            for (int j = 0; j <arr1[0].length ; j++) {// 二维数组第一个元素的长度代表列数
                System.out.print(arr1[i][j]);
            }
            System.out.println();
        }

再看一个代码:

总结:

1. 二维数组名.length代表行数

2.一维数组的元素个数就是二维数组的列数

2.不等长数组

 因为Java中行数必须指定,而列数可以不指定,也就是每一列的列数不确定,故而可以设置不等长的二维数组

四.总结

 数组是一种常用的引用类型,主要用于存储多个相同类型的数据;在Java中提供了很多与数组相关的包,类,方法如Arrays,要多去了解这些方法,会大大提高开发效率;同时,要深入理解二维数组是一维数组的数组,如何获取行数和列数,要注意和C语言中二维数组的差别!

目录
相关文章
|
JavaScript
JS中改变this指向的六种方法
JS中改变this指向的六种方法
|
运维 Serverless 云计算
云上开发新范式:Serverless 的必然与应然 | 云栖深度对话
云上开发新范式:Serverless 的必然与应然 | 云栖深度对话
|
21天前
|
存储 人工智能 NoSQL
用Context Offloading解决AI Agent上下文污染,提升推理准确性
上下文工程是将AI所需信息(如指令、数据、工具等)动态整合到模型输入中,以提升其表现。本文探讨了“上下文污染”问题,并提出“上下文卸载”策略,通过LangGraph实现,有效缓解长文本处理中的信息干扰与模型幻觉,提升AI代理的决策准确性与稳定性。
95 2
用Context Offloading解决AI Agent上下文污染,提升推理准确性
|
5月前
|
人工智能 搜索推荐 算法
PDF 转 JPG 图片小工具:CodeBuddy 助力解决转换痛点
在 PDF 转 JPG 的实际应用中,用户普遍面临转换质量差、批量处理效率低、格式兼容性不足以及编程实现困难等痛点。而 CodeBuddy 凭借智能代码生成与优化、实时错误诊断修复、助力代码学习拓展,以及支持多场景适配与个性化定制等强大的 AI 编程能力,精准直击这些难题。使用 CodeBuddy 开发 Python PDF 转 JPG 小工具,能够有效提升转换效率与质量,降低开发门槛和成本,为用户带来高效、优质的文件格式转换体验。
168 16
|
9月前
|
机器学习/深度学习 人工智能 并行计算
Titans:谷歌新型神经记忆架构,突破 Transformer 长序列处理的瓶颈
Titans 是谷歌推出的新型神经网络架构,通过神经长期记忆模块突破 Transformer 在处理长序列数据时的瓶颈,支持并行计算,显著提升训练效率。
261 5
Titans:谷歌新型神经记忆架构,突破 Transformer 长序列处理的瓶颈
|
机器学习/深度学习 人工智能 自然语言处理
软件测试中的人工智能革命:提升测试效率与质量的新篇章
随着人工智能技术的不断成熟,其在软件测试领域的应用正逐渐改变传统测试方式。本文将探讨AI在软件测试中的应用现状、优势以及面临的挑战,并通过具体案例分析展示AI如何提高测试效率和质量。最后,我们将讨论未来AI在软件测试中的发展趋势及其对人类测试工程师角色的影响。
1004 4
|
Web App开发 JavaScript 前端开发
JavaScript 中的 Range 和 Selection 对象
JavaScript 中的 `Range` 和 `Selection` 对象用于处理文本选择。`Range` 表示文档中选定的区域,而 `Selection` 表示用户选择的文本或光标位置。`Range` 可以创建并设置于任何元素或文本,具有多个属性(如 `startContainer`, `endContainer`, `collapsed`)和方法(如 `cloneContents`, `deleteContents`)。`Selection` 提供了获取和操作用户选择的方法,如 `anchorNode`, `focusNode` 和 `addRange`。两者在所有现代浏览器中基本兼容。
185 1
JavaScript 中的 Range 和 Selection 对象
|
11月前
|
云安全 弹性计算 安全
带你读《阿里云安全白皮书》(六)—— 公共云安全治理框架
《阿里云安全白皮书(2024版)》介绍了阿里云在云上安全治理框架的设计与建设,涵盖安全机制保障、安全能力支撑、数据主权保护、身份管控与授权、安全防护能力弹性扩展、快速响应与恢复、安全高可用及合规支撑等方面,旨在帮助客户以更低的成本实现更高的安全性。
|
机器学习/深度学习 存储 人工智能
AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出
【9月更文挑战第1天】AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出
AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出
|
存储 自然语言处理 机器人
ROS2教程06 ROS2行动
这篇文章是关于ROS2(Robot Operating System 2)行动(Action)通信机制的教程,包括行动的概念、特点、命令行工具的使用,以及如何编写行动的客户端和服务器代码,并介绍了如何测试行动通信。
407 4
ROS2教程06 ROS2行动