Java之数组专题

2023-05-16

文章目录

  • Java基础之数组专题
    • 数组的定义
    • 数组的声明与初始化
    • 数组元素的访问
    • 内存分析
    • 数组的使用
      • For-Each 循环
      • 数组作方法入参
      • 冒泡排序
    • 多维数组
    • 稀疏数组

Java基础之数组专题

本文章是作者学习B站系列视频《狂神说Java》与经典书籍《Java核心技术》的记录笔记与心得,创作不易,希望能够得到您的支持。

数组的定义

数组是相同类型的数据的有序集合,它存储着相同类型值得序列。每一个数据都是一个数组元素,可以根据在数组中的位置用下表来访问它们。

数组的声明与初始化

定义变量的通用格式:变量类型 + 变量名 = 变量值

使用数组前必须先声明数组,声明数组有两种语法:

* int[] a;
//dataType[] arrayRefVar;
//更推荐第一种风格,因为可以将类型int[]整型数组,与变量名分开
* int a[];
//dataType arrayRefVar[];

//以上语句只声明了变量a,但是没有初始化,应该用new进行创建

int[] a= new int[10];//数组长度为10

在Java中,提供了一种定义与初始化同时实现的简写形式(静态初始化):

int[] instance={1,2,3};
//这种写法的好处:方便随时给数组添加值

数组元素的访问

对数组中任何元素的访问和操作都是通过数组的下标实现的。注意:数组的第一个元素下标为0,往后则数组依次增加。数组的有序性也可以在这里体现。

int[] num= new int[10];
// dataType[] arrayReVar = new dataType[arraySize];
num[0]=1;//将数组中的第一个元素(下标为0)赋值为1
num[1]=2;//将数组中的第二个元素(下标为1)赋值为2
……
num[8]=9;//将数组中的第九个元素(下标为8)赋值为9
for(int i=0;i<10;i++)
{
    System.out.println(num[i]);
}
//这里第十个元素(下标为9)会输出0,因为没有被初始化和定义的整型元素会被自动赋值为0;

注意事项:

  1. 如果试图访问超过数组下标的元素,则会引发" Array Index Out Of Bounds Exception"(数组下标越界异常)

  2. 想要获取数组中的元素个数,可以用array类中的length方法获取(array.length)

内存分析

  1. 声明数组时,栈区会开辟一段内存空间,存放数组类型

  2. 创建数组时,堆区会开辟一段内存空间,存放new出来的对象和数组

int []array;
//栈区存放array数据类型
array=new int[10];
//堆区存放十个数据的空间,即使此时十个数据还没有被赋值。数据在被赋值后,会被存放在堆区中

定义出的数组的本质是数组类的对象,而Java中的对象存放在堆区里。所以数组里不管存放什么样的数据类型,对象本身依然是在堆中。

数组的使用

For-Each 循环

for-each循环可以处理数组的每个元素,无需考虑下标,是一种增强的for循环

语法:for (variable:collection) statement

public class Array1
{
    public static void main(String[] args) {
        int[] arrays={1,2,3,4,5};
     
        int max=arrays[0];
        for (int i = 0; i < 5; i++) {
            if(arrays[i]>max)
            {
                max=arrays[i];
            }
        }
        System.out.println(max);
        //常规for循环,需要通过下标访问
        for (int array : arrays) {
            System.out.println(array);
            //for-each循环,没有下标
        }
    }
}

数组作方法入参

public class Array2 {
    //数组作为参数
    public static void main(String[] args) {
        int[] num={1,2,3,4,5};
        printArray(num);//num作为printArray类的参数

    }
    public static void printArray(int[] arrays)
    {
        for(int i=0;i< arrays.length;i++)
        {
            System.out.println(arrays[i]);
        }
    }
}

冒泡排序

public class BubbleSort {
    public static void main(String[] args) {
        int[] arrays={1,2,3,4,5,6,7,8,9};
        sort(arrays);
        for(int i=0;i<arrays.length;i++)
        {
            System.out.println(arrays[i]);
        }
        //输出结果:9 8 7 6 5 4 3 2 1

    }
    public static void sort(int[] array)
    {
        int temp=0;
        for(int i=0;i<array.length-1;i++)//外层循环,判断次数
        {
            for(int j=0;j< array.length-i-1;j++)//内层循环,两个数进行比较的次数
            {
                if(array[j+1]>array[j])
                {
                    temp =array[j];
                    array[j]=array[j+1];
                    array[j+1]=temp;//实现两个数的交换
                }
            }
        }
    }
}

多维数组

  • 多维数组使用多个下标访问数组元素,可以理解为原来的一位数组的每一个元素都是一个数组,即数组的嵌套。

  • 多维数组的定义方式与一维类似:

    数组内存储的数据类型 [][]……[] +数组名称
    其中,方括号的个数即为数组的元素

稀疏数组

数组中有很多元素为0,或者很多元素重复时,使用稀疏数组。先记录原数组的行数、列数,与数组中的有效元素,再将以上数据存放在一个新的数组中。

public class Chess {
    public static void main(String[] args) {
        //创建一个二维数组11*11 0表示没有棋子,1和2分别表示黑棋和白棋
        int[][] array1 = new int[11][11];
        array1[1][2]=1;
        array1[2][3]=2;
        System.out.println("输出原始数组");
        for (int[] ints : array1) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
        System.out.println("=====================");
        //转换为稀疏数组
        //获取有效值的个数
        int sum=0;
        for (int i = 0; i < 11; i++) {
           for(int j=0;j<11;j++)
           {
               if(array1[i][j]!=0)
               {
                   sum++;
               }
           }
        }
        System.out.println("有效值的个数"+sum);
        //创建稀疏数组
        int[][] array2=new int[sum+1][3];//加1是加了表头,3是固定的
        array2[0][0]=11;
        array2[0][1]=11;
        array2[0][2]=sum;
        //遍历二维数组
        int count=0;
        for(int i=0;i<array1.length;i++)
        {
            for(int j=0;j<array1[i].length;j++)
            {
                if(array1[i][j]!=0)
                {
                    count++;
                    array2[count][0]=i;
                    array2[count][1]=j;
                    array2[count][2]=array1[i][j];

                }
            }
    }
        for (int i = 0; i < array2.length; i++) {
            System.out.println(array2[i][0]+"\t"
            +array2[i][1]+"\t"+array2[i][2]+"\t");
        }//稀疏数组打印
        System.out.println("=====================");
        //稀疏数组还原为原数组
        int[][]array3=new int[array2[0][0]][array2[0][1]];
        for (int i = 1; i < array2.length; i++) {
            array3[array2[i][0]][array2[i][1]]=array2[i][2];
        }
        for (int[] ints : array1) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
        }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java之数组专题 的相关文章

随机推荐

  • ROS通信模式/动作编程(设置收发节点,使小海龟移动到指定位置)以及分布式通信

    文章目录 一 话题 服务模式编程1 1 创建工作空间1 1 1 创建ROS工程包1 1 2 在工作区编译工程包 1 2 话题模式编程1 2 1 创建通信的收 发节点1 2 1 1 在src目录中创建一个发布节点1 2 1 2 在src目录中
  • Ubuntu18.04安装ros(顺利解决 sudo rosdep init 与 rosdep update 存在的问题,附保姆级图文流程)

    Ubuntu18 04 xff08 Ubuntu20 04 xff09 安装ros 顺利解决 sudo rosdep init 与rosdep update 存在的问题 xff0c 附保姆级图文流程 前言 安装了很多次 xff0c 东拼西凑
  • linux命令发送接口请求

    curl k X POST H 34 Accept Encoding gzip deflate 34 H 34 Content type application 34 H 34 x www form urlencoded UTF 8 34
  • UDP协议及编程

    UDP协议 UDP是无连接的 xff0c 即发送数据之前不需要连接 xff0c 因此减少了开销和发送数据之间的时延 UDP使用尽最大努力交付 xff0c 即不保证可靠交付 xff0c 因此主机不需要维持复杂的连接状态表 UDP是面向报文的
  • 24.STM32的IO口扩展PCF8574

    1 IO口扩展芯片 PCF8574是一款带IIC总线 xff0c 可使大多数MCU实现远程I O 口扩展 该器件包含一个8位准双向口和一个IIC总线接口 xff08 通信接口IIC xff0c 2根线可以扩展为8个口 xff09 PCF85
  • 网络编程(二)基础预备知识掌握

    网络编程预备知识 socket 是一种编程接口也是一种文件描述符 xff08 套接字 xff09 可用于 TCP UDP IPX通信 socket的类型 流式套接字 xff08 SOCK STREAM xff09 xff1a 提供一种面向连
  • 使用USTC-TK2016工具对USTC-TFC2016数据集进行处理——报错解决记录

    USTC TK2016数据处理工具 xff1a https github com yungshenglu USTC TK2016 USTC TFC2016数据集 xff1a https github com yungshenglu USTC
  • C++避免头文件重复包含问题

    避免头文件重复包含的方法 xff0c 通常有两种做法 xff1a 条件编译和 pragma once 条件编译就是通常的 ifndef XXX H define XXX H endif ifndef XXX H 表示 xff0c 如果没有包
  • c++ 调用yolov3-yolov4

    ifdef WIN32 define OPENCV define GPU endif include lt iostream gt include lt windows h gt include 34 yolo v2 class hpp 3
  • 一文搞懂UART、RS232、RS485、TTL等常用的接口与协议

    常用的接口与协议 PC机常用的按照接口数量细分为A型 xff08 15针 xff09 xff0c B型 xff08 25针 xff09 xff0c C型 xff08 37针 xff09 xff0c D型 xff08 50针 xff09 xf
  • 解决头文件重复包含与结构体未定义的问题

    一 养成良好的编程习惯 1 保证h文件的纯洁性 xff1a 尽量一个c文件对应一个h文件 xff0c 不要h文件包含许多h文件 这样可以优化编译速度且避免出现h文件中某个结构体之类未定义 xff0c 先在上个h文件中使用的错误 2 对于变量
  • Nokia 5110液晶屏显示模块的使用与开发

    Nokia 5110液晶屏显示模块 我们先来看看他的参数 nbsp 在深入研究连接和示例代码之前 让我们首先看一下其Pinout nbsp RST nbsp 针复位显示 它是低电平有效引脚 您可以通过将其拉低来重置显示 您也可以将此引脚连接
  • mongodb的文档的分页查询

    统计查询使用count xff08 xff09 方法 xff1a 统计comment集合的所有的记录数 xff1a db comment count 分页列表查询 xff1a 可以使用limit xff08 xff09 方法来读取指定数量的
  • 前后端分离项目的部署

    本次项目的项目架构图 xff1a Nginx主要部署的是 项目的静态资源 xff0c 即前端项目 通过Nginx的反向代理 xff0c 将请求发给Tomcat服务器 然后获取数据通过MySQL的主从复制 xff0c 主库负责更新数据 xff
  • echarts基本用法

    目录 tooltip 设置提示框信息 图表的提示框组件 legend 图例组件 toolbox 工具箱组件 可以另存为图片等功能 grid 网格配置 grid可以控制线型图 柱状图 图表大小 xAxs 设置x轴的相关配置 y轴同理 seri
  • java实现UDP通信传输信息

    实现UDP通信要依靠 DatagramPacket对象进行实现 UDP协议的相关介绍 xff1a UDP传输分为 服务端 和客户端 服务端发送消息 客户端接收消息 xff0c 服务端需要知晓客户端的 IP和所监听的端口号 话不多说直接上代码
  • MySQL篇之动态建表。

    在日常开发中 xff0c 可能会出现 动态配置的一些情况 xff0c 此时存储动态配置的一些数据时就需要动态建表了 xff0c 家人们可以选则两种方案 一种是采用mybatis的mapper xml文件里面使用 语句进行创建 二就是使用da
  • IDEA 2020.2 配置Tomcat服务器

    1 创建一个工程 2 右键项目名称 xff0c 选择 add framwork support 3 选中Web Application xff0c 默认勾选创建web xml 目录结构如下 4 点这两个地方中的任意一个 xff0c 添加配置
  • Java笔记之markdown语法

    狂神说Java系列视频笔记 本文章是作者学习B站系列视频 狂神说Java 的记录笔记与心得 xff0c 创作不易 xff0c 希望能够得到您的支持 1 Markdown的基本语法与使用 Markdown是当下一种较为流行的一种写作方法 通过
  • Java之数组专题

    文章目录 Java基础之数组专题数组的定义数组的声明与初始化数组元素的访问内存分析数组的使用For Each 循环数组作方法入参冒泡排序 多维数组稀疏数组 Java基础之数组专题 本文章是作者学习B站系列视频 狂神说Java 与经典书籍 J