Java基础学习(五)

news/2025/1/9 13:18:52/文章来源:https://www.cnblogs.com/victoria6013/p/18661960

Java基础学习(五):数组

目录
  • Java基础学习(五):数组
    • 概念
    • 声明与创建
    • 初始化
    • 基本特点
    • 内存分析
    • 应用
    • 多维数组
    • 扩展内容
      • Arrays 类
      • 冒泡排序
      • 稀疏数组

本文为个人学习记录,内容学习自 狂神说Java


概念

  • 数组是相同类型数据的有序集合
  • 每个数据称为一个数组元素,可以通过下标来访问

声明与创建

  1. 数组的两种基本声明方法:

    数据类型[] 数组名;					// 推荐使用
    数据类型 数组名[];
    
  2. 数组的两种基本创建方法:

    数组名 = {数组内容};				// 创建时直接初始化
    数组名 = new 数据类型[数组长度];	// 创建时仅指定大小,元素被初始化为默认值,默认值规则和前面实例变量、类变量的规则一致
    
  3. 当然也可以一步完成数组的声明和创建:

    数据类型[] 数组名 = {数组内容};
    数据类型[] 数组名 = new 数据类型[数组长度];
    
  4. 数组的元素通过索引(下标)来访问,索引从 0 开始

  5. 获取数组长度 数组名.length


初始化

  • 静态初始化

    int[] a = {1, 2};
    
  • 动态初始化

    int[] a = new int[2];
    a[0] = 1;
    a[1] = 2;
    

基本特点

  • 数组一旦被创建,它的大小就是不可改变的
  • 数组中的元素必须是相同类型
  • 数组中的元素可以是任何数据类型,包括基本类型和引用类型
  • 数组变量属于引用类型,数组也可以看成对象,数组中每个元素相当于该对象的成员变量

内存分析

图5-1

举个创建数组的栗子:

  1. 当声明数组时,会在栈中为引用类型的变量 array 分配空间,用于存储数组的地址;
  2. 当创建数组时,会根据给定的数组大小在堆中分配空间,而地址由声明时栈中的变量 array 指出;
  3. 当对数组赋值时,将数值保存在堆中。
图5-2

应用

  1. 使用 增强for循环 遍历数组元素

    int[] array = {1, 2, 3, 4, 5};
    for (int i : array) {System.out.println(i);					// 打印数组中每一个元素
    }
    
  2. 数组作为实参形参

    public static void main(String[] args) {int[] array = {1, 2, 3, 4, 5};printArray(array);
    }
    public static void printArray(int[] array){for (int i : array){System.out.println(i);}
    }
    
  3. 数组作为返回值

    public static void main(String[] args) {int[] array = {1, 2, 3, 4, 5};int[] result = reverse(array);for (int i: result){System.out.println(i);}
    }
    public static int[] reverse(int[] array){int[] result = new int[array.length];for (int i = 0; i < array.length; i++){result[array.length - i -1] = array[i];}return result;
    }
    

多维数组

多维数组可以看成数组的数组,比如二维数组就是一个特殊的一维数组,其每一个元素都是一个一维数组

二维数组的声明和创建:

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

扩展内容

Arrays 类

数组对象本身并没有提供什么方法可以供我们调用,但 API 中提供了一个工具类 java.util.Arrays 供我们使用

  • 数组的工具类 java.util.Arrays
  • Arrays 类中的方法都是 static 修饰的 静态 方法,可以直接使用类名进行调用
  • 常用功能:
    • 给数组赋值:通过 fill 方法
    • 对数组排序:通过 sort 方法
    • 比较数组:通过 equals 方法比较数组中的元素是否相等
    • 查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找

示例一:采用 Arrays.toString 快速打印数组数据

import java.util.Arrays;int[] a = {1, 2, 45, 63, 8};
System.out.println(Arrays.toString(a));				// 输出为 [1, 2, 45, 63, 8]

示例二:采用 Arrays.sort 进行升序排序

import java.util.Arrays;int[] a = {1, 2, 45, 63, 8};
Arrays.sort(a);
System.out.println(Arrays.toString(a));				// 输出为 [1, 2, 8, 45, 63]

冒泡排序

总共有八大排序方法,而冒泡排序无疑是最为出名的排序算法之一

新建 Microsoft PowerPoint 演示文稿

冒泡排序的时间复杂度为 O(n²)

示例:一种简单的实现方法

public static void sort(int[] array){for (int i = 0; i < array.length - 1; i++){for (int j = 0; j < array.length - 1 - i; j++){if (array[j] > array[j+1]){int tmp = array[j];array[j] = array[j+1];array[j+1] = tmp;}}}System.out.println(Arrays.toString(array));
}

稀疏数组

  • 当一个数组中大部分元素为0,或者为同一值时,可以使用稀疏数组来保存该数组
  • 稀疏数组的处理方式是:记录数组一共有几行几列,有多少个不同值,把具有不同值的元素值和行列记录在一个小规模的数组中,从而缩小程序的规模
  • 示例:下图左边是原始数组,右边是稀疏数组,其中稀疏数组的第一行记录了原始数组的总行列及不同值个数,其余行记录不同值的具体行列和数值
图5-3

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

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

相关文章

CDS标准视图:付款锁定原因 I_PaymentBlockingReason

视图名称:付款锁定原因 I_PaymentBlockingReason 视图类型:基础视图 视图代码:点击查看代码 //Documentation about annotations can be found at http://help.sap.com searching for CDS annotations //Inserted by VDM CDS Suite Plugin @ObjectModel.usageType.sizeCateg…

欧拉OpenEuler使用nfs和rsync复制文件夹到新服务器.250109

案例: 服务器A是新服务器 服务器B为老服务器 需要将服务器B的/data/storage ,拷贝到服务器A的 /home/sync-data下一、服务器A 新服务器配置nfs 1. 安装nfs systemctl stop firewalld df -h mkdir -p /home/sync-datayum install nfs-utils systemctl status nfs-se…

在 .NET 9 中使用 Scalar 替代 Swagger

前言 在.NET 9发布以后ASP.NET Core官方团队发布公告已经将Swashbuckle.AspNetCore(一个为ASP.NET Core API提供Swagger工具的项目)从ASP.NET Core Web API模板中移除,这意味着以后我们创建Web API项目的时候不会再自动生成Swagger API文档了。那么今天咱们一起来试试把我们…

第九章 范围管理 (2025年详细解析版)

目录什么是范围管理?9.1 管理基础9.1.1 产品范围和项目范围9.1.2 产品范围和项目范围管理新实践9.2 项目范围管理过程9.2.1 过程概述9.2.2 项目范围管理过程9.2.3 裁剪考虑因素(了解)9.2.4 敏捷与适应方法总结9.3 规划范围管理1. 课程目标2. 过程定义:规划范围管…

Qt监控系统远程网络登录/请求设备列表/服务器查看实时流/回放视频/验证码请求

一、前言说明 这几个功能是近期定制的功能,也非常具有代表性,核心就是之前登录和设备信息都是在本地,存放在数据库中,数据库可以是本地或者远程的,现在需要改成通过网络API请求的方式,现在很多的服务器很强大,都提供了各种API接口,包括登录和拉取回放等,相当于直接对接…

debian10测试

https://help.aliyun.com/zh/ecs/user-guide/change-debian-9-or-10-repository-addresses?spm=a2c4g.11186623.0.0.52c44bccrP9uFq

C-V2X测试探秘系列之:电磁兼容试验方法

在智能网联汽车中,各种通信技术如2G/3G/4G/5G、GNSS(全球导航卫星系统)、V2X(车联网通信)等在行业内被广泛使用。这些技术让汽车能够实现紧急呼叫、在线娱乐、导航等多种功能。EMC测试就是为了确保在复杂电磁环境下,汽车的通信系统仍然可以正常工作,保护驾乘者的安全。参…

qwrt 旧版配置 fm350 教程

qwrt 旧版配置 fm350 教程网络-接口,左下角新建接口​ 选择协议-FM350 蜂窝网络​ 防火墙修改到 wan​ 如果需要查看信息​本文来自博客园,作者:铁流是宝宝,转载请注明原文链接:https://www.cnblogs.com/dawnings/p/18661915/qwrt-old-version-configuration-fm350-tutori…

普通的maven项目将main函数打包实现java -jar来运行

一、创建一个maven项目 假设groupId为org.example 则在src\main\java目录下创建一个org包,在其下创建一个example包,然后创建我们打包后要执行java类MyThread.java 二、在pom文件中添加以下build插件声明 在<project>标签内添加 <build> <plugins> …

前端实践-hexo博客

一.简单准备 1.准备工具:npm,nvm,node,git bash 2.全局安装hexo npm install -g hexo-cli hexo # -g 为全局安装 3.新建一个文件夹用于存放博客,例如blog, cd文件夹右键在此处gitbash执行(下面命令行均是gitbash执行)hexo init 执行npm install下载依赖 4.现在执行hex…

linux上下载安装配置tomcat

linux上下载安装配置tomcat 下载 https://tomcat.apache.org/ # tomcat官网安装 注意:tomcat需要jdk环境,参考:linux上安装jdk # 有安装包后,在linux新建目录 /opt/tomcat mkdir /opt/tomcat cd /opt/tomcat # 把安装包放到此目录,用xftp上传 # 在Linux上下载的,就进入压…

【每日一题】20250109

我在城市找不到存在感,每天不知道太阳从何方升起,又落向哪里,四季跟我的生活没有关系。我只看到树叶青了又黄了,春天来了,又去了。我在一岁岁地长年纪,一道道地长皱纹。【每日一题】一质量为 \(m\) 的物块恰好静止在倾角为 \(\theta\) 的斜面上,现对物块施加一个竖直向下…