【JavaSE】关于数组

news2025/7/19 10:15:02

文章目录

  • 数组的创建与初始化
    • 数组的初始化
      • 静态初始化
      • 动态初始化
  • 数组的存储
    • null
  • 打印数组的三种方式
      • 循环遍历打印
      • foreach打印
      • Arrays.toString()打印
  • 数组的练习
    • 冒泡排序
    • 常用的API
      • 数组拷贝Arrays.copyOf()
      • 数组排序Arrays.sort()
      • 数组的快速初始化Arrays.fill()
  • 二维数组

数组的创建与初始化

在C语言中我们也提到了数组的概念,什么是数组呢?数组就是相同类型元素的一个集合。那么我们如何在Java中创建一个数组呢?跟C语言的语法一样嘛?其实是不一样的。
T[] 数组名 = new T[N];

T:表示数组中存放元素的类型
T[]:表示数组的类型
N:表示数组的长度

例如:

 public static void main(String[] args) {
        int[] array = new int[10];// 创建了一个可以储存10个整形的数组
        double[] array2 = new double[10];// 创建了一个可以储存10个double类型的数组
        boolean[] array3 = new boolean[10];// 创建了一个可以储存10个布尔类型的数组
    }

数组的初始化

静态初始化

数组在静态初始化时不指定数据元素的个数,而直接将具体的数据内容进行指定
语法格式: T[] 数组名称 = {data1, data2, data3, ..., datan};或者 T[] 数组名称 = new T[]{data1, data2, data3, ..., datan};

动态初始化

数组在动态初始化时,直接指定数组中的元素个数
语法格式:T[] 数组名称 = new T[10]

   public static void main(String[] args) {
        //静态初始化
        int[] array = new int[]{1,2,3,4};
        double[] array2 = {1.4,2.9,10.4};
        //动态初始化
        boolean[] array3 = new boolean[4];
    }

注意事项:

1、静态初始化时我们没有给数组的长度,但编译器在编译时会根据我们给的数据来确定数组长度。
2、初始化时保持前后的数据类型一致
3、如果我们没有对数组进行初始化,数组中元素有对应默认值。

类型默认值
byte0
short0
int0
long0
float0.0f
double0.0
char/u0000
booleanfalse

数组的存储

我们了解了Java中数组是如何创建的之后,数组是存储在哪里的呢?在Java中new创建的对象都是在堆上保存的,所以我们数组中的数据也保存在堆上的。

 public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4};
    }

我们这样去创建一个数组因为arr这个数组变量是在main方法内创建的,是局部变量,所以他的内存空间在栈上开辟,而这个数组的内容是我们new出来的对象,所以数组的内容存储在堆上。我们用一个图来帮助大家理解
在这里插入图片描述

我们从图中可以看出,arr本身并没有存储数组的信息,他存储的是对象在堆上的起始地址。在Java中称这样的变量为引用变量

null

既然有地址的出现那一定有null,null在Java中表示”空引用“,也就是一个不指向对象的引用。null 的作用类似于 C 语言中的 NULL (空指针), 都是表示一个无效的内存位置。 因此不能对这个内存进行任何读写操作.,一旦尝试读写, 就会抛出 NullPointerException。

打印数组的三种方式

循环遍历打印

在C语言我们都知道了,使用数组就需要去访问数组,如何访问数组呢?我们通过数组的下标去访问数组,数组的下标从0开始,依次递增,通过下标可以访问其任意位置的元素。我们就可以通过循环遍历打印数组:

 public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4,5,6,7};
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]);
        }
    }

在这里插入图片描述

foreach打印

在Java中还支持这样的语法:

 public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4,5,6,7};
        for (int ret: arr) {
            System.out.print(ret);
        }
     
    }

在这里插入图片描述
这样我们也可以打印我们的数组。

Arrays.toString()打印

我们觉得上面两个太麻烦了,在Java中还支持这样的语法,使用方法把数组变为字符串打印出来:

  public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4,5,6,7};
        System.out.println(Arrays.toString(arr));
    }

在这里插入图片描述
这样我们也可以打印数组。这是如何实现的呢?我们可以在帮助文档中找到这个方法:
在这里插入图片描述
在这里插入图片描述
就可以看到有关他的相关介绍。

数组的练习

冒泡排序

在我讲解C语言时我们写过一个排序,冒泡排序,我们把数组作为方法的参数:

    public static void bubbleSort(int[] array) {
        //外层循环代表需要排序的次数,当数组中n - 1个数有序时,第n个数也有序,所以偶们只需要对array.length - 1个数排序
        for (int i = 0; i < array.length - 1; i++) {
            boolean flag = false;//当此次循环没有进行排序时说明数组有序
            //内层循环表示每个数的排序次数,因为每排一个都有一个数变为有序,所以每个数,排序次数是递减的
            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;
                    flag = true;
                }
            }
            if(flag == false) {
                return ;
            }
        }
    }
    
    public static void main2(String[] args) {
        int[] array = new int[]{2,1,3,4,5,6,8,7,9};
        bubbleSort(array);
        System.out.println(Arrays.toString(array));
    }

常用的API

使用这些Java中内置的方法我们可以快速的完成我们想要的需求,当然除了我介绍的方法外还有一些方法大家可以自己在帮助文档中查阅。

数组拷贝Arrays.copyOf()

 public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4,5};
        int[] arr2 = Arrays.copyOf(arr,arr.length);
        System.out.println(Arrays.toString(arr2));
    }

在这里插入图片描述

数组排序Arrays.sort()

   public static void main(String[] args) {
        int[] arr = new int[]{2,3,1,4,5,7,2};
        Arrays.sort(arr);
        System.out.println(Arrays.toString(arr));
    }

在这里插入图片描述

数组的快速初始化Arrays.fill()

  public static void main(String[] args) {
        int[] arr = new int[10];
        Arrays.fill(arr,1);
        System.out.println(Arrays.toString(arr));
    }

在这里插入图片描述

二维数组

二维数组其实就是特殊的一维数组,我们来看看二维数组的基本语法:
数据类型[][] 数组名称 = new 数据类型 [行数][列数] { 初始化数据 };

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

我们就可以使用上面这行代码创建一个二维数组,我们也可以遍历他并且将他打印出来。

 public static void main1(String[] args) {
        int[][] array = new int[][]{{1,2,3},{4,5,6}};
        //打印数组
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[0].length; j++) {
                System.out.print(array[i][j] + " ");
            }
            System.out.println();
        }
}

我们可以运行一下查看结果:
在这里插入图片描述
在C语言中我们说二维数组的行可以省略列不可以省略,但是在Java中恰恰相反

    public static void main(String[] args) {
        int[][] array4 = new int[2][];
        array4[0] = new int[]{1,2,3,4,5,6};
        array4[1] = new int[]{3,4,5,6};
        System.out.println(Arrays.deepToString(array4));
    }

在这里插入图片描述
我们称这样的数组为不规则数组,有的小伙伴要问了,博主你怎么没有遍历就把这个二维数组打印出来了,其实二维数组的打印也有简便的方法。使用Arrays.deepToString()这个方法就可以实现打印二维数组。

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

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

相关文章

mysql之MHA的高可用

一、MHA概述 1.什么是 MHA&#xff1a; MHA&#xff08;MasterHigh Availability&#xff09;是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点故障的问题。 MySQL故障切换过程中&#xff0c;MHA能做到0-30秒内自动完成故障切换操作…

1分钟完成在线测试部署便捷收集班级同学文件的web管理系统

最近CSDN推出了一个新功能【云IDE】&#xff0c;个人对这个新功能(比赛奖金 )挺感兴趣的&#x1f92d;&#xff0c;于是瞬速地拿之前自己搞的一个便捷收集班级同学文件的web管理系统&#xff08;下面简称该项目为cfile&#xff09;体验了一下&#xff0c;发现功能还是挺好用的&…

Node.js 实战 第1章 欢迎进入Node.js 的世界 1.5 三种主流的Node 程序 1.6 总结

Node.js 实战 文章目录Node.js 实战第1章 欢迎进入Node.js 的世界1.5 三种主流的Node 程序1.5.1 Web 应用程序1.5.2 命令行工具和后台程序1.5.3 桌面程序1.5.4 使用Node 的应用程序1.6 总结第1章 欢迎进入Node.js 的世界 1.5 三种主流的Node 程序 Node 程序主要可以分成三种类…

某网站视频播放花屏解密

某网站视频播放花屏解密样例网址&#xff1a;aHR0cHM6Ly90di5jY3R2LmNvbS8yMDIyLzA5LzMwL1ZJREVnZ0ZRYmZ6NmlMeXZjN0F4d0NlZjIyMDkzMC5zaHRtbA 站内之前也曾经发过相关的问题 1.CCTV视频m3u8视频下载&#xff0c;下载下来时长正确&#xff0c;有声音&#xff0c;但是画面是马…

聚沙成塔【45天玩转uni-app】初探uni-app

文章目录写在前面DCloud当下跨平台开发存在的问题为什么选择uni-app写在最后写在前面 聚沙成塔——每天进步一点点&#xff0c;大家好我是几何心凉&#xff0c;不难发现越来越多的前端招聘JD中都加入了uni-app 这一项&#xff0c;它也已经成为前端开发者不可或缺的一项技能了&…

ROS1可视化利器---Webviz

0. 简介 对于ROS1而言&#xff0c;rqt和plotjuggler是我们最常用的工具&#xff0c;这两个工具&#xff1a;rqt中嵌入了很多有用的小工具&#xff0c;但是它需要播放离线包&#xff0c;没有办法对离线包进行实时的分析。而plotjuggler支持对离线bag包进行分析&#xff0c;但是…

[C语言、C++]数据结构作业:用递归实现走迷宫(打印正确通路即可)

如果是非递归情况 如果当前点&#xff08;方格&#xff09;为出口&#xff0c;则成功退出 &#xff08;否则&#xff09; 如果可继续走(向相邻点试探)&#xff0c;存在某个可前进 的相邻点(分支)则&#xff1a; 1、将当前点保存&#xff0c;以便回退 2、将相邻点作为当前点…

【数据结构】排序3——交换排序(冒泡排序、快速排序)

文章目录交换排序冒泡排序冒泡排序算法算法分析快速排序改进后的快速排序算法算法分析交换排序 【基本思想】 两两比较&#xff0c;如果发生逆序则交换&#xff0c;直到所有记录都排好序为止。 常见的交换排序方法&#xff1a; 冒泡排序T(n)O(n2) 快速排序T(n)O( nlog2n) 冒…

SpringSecurity Oauth2实战 - 06 获取用户登录信息并存储到本地线程

文章目录1. 获取用户登录信息1. 用户信息共享的ThreadLocal类 UserInfoShareHolder2. 写一个拦截器 UserInfoInterceptor3. 配置拦截器 CommonWebMvcAutoConfiguration2. 源码分析1. 认证用户通过access_token访问受限资源2. 进入过滤器 OAuth2AuthenticationProcessingFilter#…

源码分析:Transport 开发

有关 transport 相关队列的调用过程: 【T ransportService 】 TransportService.java 的所有接口由 DefaultTransportService.java 实现,里面包含四种接口: (1)发送到 ruleEngine 发送 TbProtoQueueMsg<ToRuleEngineMsg> 消息。 由 DefaultTbRuleEngineConsumerServic…

【攻破css系列——附加篇】vscode自动格式化

文章目录1. 快速格式化1.1 格式化的定义1.2 vscode的格式化组合键2. 自动格式化2.1 定义2.2 设置自动格式化的步骤1. 快速格式化 1.1 格式化的定义 格式化会让我们的代码正确缩进&#xff0c;同级标签的缩进空格一致&#xff0c;最后使我们代码更好看且易懂。 没有格式化我们…

Nginx学习

Nginx学习 nginx的基本概念 nginx是什么&#xff1f;做什么事情&#xff1f; Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器&#xff0c;特点是占用内存少&#xff0c;并发能力强&#xff0c;事实上nginx的并发能力确实在同类型的网页服务器中表现较好。nginx专为…

gcc编程4步编译、调试c程序实操详解(Linux系统编程)

gcc编译可以执行程序4步骤:预处理、编译、汇编、链接 一、知识储备&#xff08;想看实战往下翻&#xff09; 在linux程序种&#xff0c;c程序需要用gcc进行编译&#xff0c;链接用ld程序&#xff0c;ggc编译完成后可自动调用ld程序完成链接。 调用gcc程序的语法格式&#xff…

Android Studio APP开发入门之对话框Dialog的讲解及使用(附源码 包括提醒对话框,日期对话框,时间对话框)

运行有问题或需要源码请点赞关注收藏后评论区留言~~~ 一、提醒对话框 AlertDialog名为提醒对话框&#xff0c;它是Android中最常用的对话框&#xff0c;可以完成常见的交互操作&#xff0c;例如提示&#xff0c;确认&#xff0c;选择等功能&#xff0c;由于AlertDialog没有公开…

CLRNet: Cross Layer Refinement Network for Lane Detection——论文简述

一、简介 CLRNet充分利用了低层次特征和高层次特征&#xff0c;因为两者是互补的&#xff0c;先基于高层次特征侦测道路&#xff0c;再基于底层次特征进行调优&#xff1b;由于遮挡的存在&#xff0c;使用ROIGather进行全局信息的收集&#xff0c;在ROI道路特征和全局特征图之…

SaaS 架构基础理论(一)

SaaS架构基础理论1、背景2、SaaS商业模式2.1、什么是SaaS2.2、SaaS软件的优势&#xff1a;2.3、SaaS劣势&#xff1a;3.SaaS应用架构3.1、SaaS成熟度模型3.2、SaaS成熟模型分级3.2.1、Level1 定制开发3.2.2、Level2 可配置3.2.3、Level3 高性能的多租户架构3.2.4、Level4 可伸缩…

【Docker】Docker安装与入门

Docker入门与基础命令 Docker简介 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的 Linux或Windows操作系统的机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xf…

Zookeeper几种应用

分布式锁 master-worker模式 涉及三种角色&#xff1a; 1. master&#xff0c;用于检测新的task、worker的添加&#xff0c;将新的task分配给worker处理 2. worker&#xff0c;将自己注册到系统&#xff0c;被master发现后&#xff0c;监控task 3. client&#xff0c;客户…

ARM pwn 入门 (3)

由于网上的ARM pwn题很少很难找&#xff0c;因此这里拿ROP Emporium的8道题做练习&#xff0c;这个网站有包含x86-64、x86-32、MIPS、ARM共4种架构的elf文件可以做。 1. ret2win 注意&#xff1a;在执行需要动态链接库加载的ARM elf文件时&#xff0c;如果直接使用qemu-arm x…

(免费分享)基于javaweb,ssm旅游景点预定系统

源码获取&#xff1a;关注文末gongzhonghao&#xff0c;输入003领取下载链接 IDEA开发工具,数据库&#xff1a;mysql&#xff0c;Tomcat8 采用&#xff1a;springmvcspringmybatis框架 &#xff08;1&#xff09;用户信息管理模块 用户信息管理模块分为后台管理员信息的维护…