首页 > 编程语言 >Java基础 | 数组 | 一维数组 | 二维数组 | 数组初始化 | 索引

Java基础 | 数组 | 一维数组 | 二维数组 | 数组初始化 | 索引

时间:2024-09-09 09:49:52浏览次数:5  
标签:初始化 arr Java int System 数组 println out

目录

一维数组

什么是数组

数组定义格式

格式一

格式二

数组初始化

数组动态初始化

什么是动态初始化

动态初始化格式

动态初始化格式详解

等号左边

等号右边

数组静态初始化

什么是静态初始化

静态初始化格式

完整版格式

简化版格式

示例代码

数组元素访问

什么是索引

访问数组元素格式

示例代码

内存分配

内存概述

java中的内存分配

数组操作的两个常见小问题

索引越界异常

出现原因

解决方案

空指针异常

出现原因

解决方案

数组案例

数组遍历

数组最值

实现思路

代码实现

数组元素反转

实现思路

代码实现

二维数组

什么是二维数组

二维数组格式

格式一

格式解释

m表示这个二维数组有多少个一维数组

n表示每一个一维数组的元素个数

举例

格式二

格式解释

m表示这个二维数组有多少个一维数组

这一次没有直接给出一维数组的元素个数,可以动态的给出

举例

格式三

举例

二维数组遍历

案例代码


一维数组

什么是数组

数组就是存储数据长度固定的容器,存储多个数据的数据类型要一致。

总结:存放数据,长度和类型是固定的

数组定义格式

格式一

数据类型[] 数组名;

示例:

int[] arr;        
double[] arr;      
char[] arr;

格式二

数据类型 数组名[];

示例:

int arr[];
double arr[];
char arr[];

数组初始化

数组动态初始化

什么是动态初始化

数组动态初始化就是只给定数组的长度,由系统给出默认初始化值

动态初始化格式
数据类型[] 数组名 = new 数据类型[数组长度];
int[] arr = new int[3];
​
System.out.println(arr);//[I@1540e19d
​
//访问数组元素格式
System.out.println(arr[0]);//0
System.out.println(arr[1]);//0
System.out.println(arr[2]);//0
动态初始化格式详解
  • 等号左边
    • int:数组的数据类型

    • []:代表这是一个数组

    • arr:代表数组的名称

  • 等号右边
    • new:为数组开辟内存空间

    • int:数组的数据类型

    • []:代表这是一个数组

    • 3:代表数组的长度

数组静态初始化

什么是静态初始化

在创建数组时,直接将元素确定,由系统计算出数组的长度

静态初始化格式
  • 完整版格式
    数据类型[] 数组名 = new 数据类型[]{元素1,元素2,...};
  • 简化版格式
    数据类型[] 数组名 = {元素1,元素2,...};
示例代码
  public class ArrayDemo {
      public static void main(String[] args) {
          //定义数组
          int[] arr = {1, 2, 3};
  
          //输出数组名
          System.out.println(arr);
  
          //输出数组中的元素
          System.out.println(arr[0]);//1
          System.out.println(arr[1]);//2
          System.out.println(arr[2]);//3
      }
  }

数组元素访问

什么是索引

每一个存储到数组的元素,都会自动的拥有一个编号,从0开始。
这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。     

访问数组元素格式

数组名[索引];

示例代码

public class ArrayDemo {
    public static void main(String[] args) {
        int[] arr = new int[3];
​
        //输出数组名
        System.out.println(arr); //[I@880ec60
​
        //输出数组中的元素
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
    }
}

内存分配

内存概述

内存是计算机中的重要原件,临时存储区域,作用是运行程序。
我们编写的程序是存放在硬盘中的,在硬盘中的程序是不会运行的。
必须放进内存中才能运行,运行完毕后会清空内存。 
Java虚拟机要运行程序,必须要对内存进行空间的分配和管理。 

java中的内存分配

目前我们只需要记住两个内存,分别是:栈内存和堆内存

区域名称作用
寄存器给CPU使用,和我们开发无关。
本地方法栈JVM在使用操作系统功能的时候使用,和我们开发无关。
方法区存储可以运行的class文件。
堆内存存储对象或者数组,new来创建的,都存储在堆内存。
方法栈方法运行时使用的内存,比如main方法运行,进入方法栈中执行。

数组操作的两个常见小问题

索引越界异常
  • 出现原因
    public class ArrayDemo {
        public static void main(String[] args) {
            int[] arr = new int[3];
            System.out.println(arr[3]);
        }
    }

    数组长度为3,索引范围是0~2,但是我们却访问了一个3的索引。

    程序运行后,将会抛出ArrayIndexOutOfBoundsException 数组越界异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。

  • 解决方案

    将错误的索引修改为正确的索引范围即可!

空指针异常
  • 出现原因
    public class ArrayDemo {
        public static void main(String[] args) {
            int[] arr = new int[3];
    ​
            //把null赋值给数组
            arr = null;
            System.out.println(arr[0]);
        }
    }

    arr = null 这行代码,意味着变量arr将不会在保存数组的内存地址,也就不允许再操作数组了,因此运行的时候会抛出 NullPointerException 空指针异常。在开发中,数组的越界异常是不能出现的,一旦出现了,就必须要修改我们编写的代码。

  • 解决方案

    给数组一个真正的堆内存空间引用即可!

数组案例

数组遍历

就是将数组中的每个元素分别获取出来,就是遍历。遍历也是数组操作中的基石。

public class ArrayTest01 {
    public static void main(String[] args) {
        int[] arr = { 1, 2, 3, 4, 5 };
        System.out.println(arr[0]);
        System.out.println(arr[1]);
        System.out.println(arr[2]);
        System.out.println(arr[3]);
        System.out.println(arr[4]);
    }
}

以上代码是可以将数组中每个元素全部遍历出来,但是如果数组元素非常多,这种写法肯定不行,因此我们需要改造成循环的写法。数组的索引是 0 到 lenght-1 ,可以作为循环的条件出现。

public class ArrayTest01 {
    public static void main(String[] args) {
        //定义数组
        int[] arr = {11, 22, 33, 44, 55};
​
        //使用通用的遍历格式
        for(int x=0; x<arr.length; x++) {
            System.out.println(arr[x]);
        }
    }
}

数组最值

数组最值就是从数组的所有元素中找出最大值或最小值

实现思路
  • 定义变量,保存数组0索引上的元素

  • 遍历数组,获取出数组中的每个元素

  • 将遍历到的元素和保存数组0索引上值的变量进行比较

  • 如果数组元素的值大于了变量的值,变量记录住新的值

  • 数组循环遍历结束,变量保存的就是数组中的最大值

代码实现
public class ArrayTest02 {
    public static void main(String[] args) {
        //定义数组
        int[] arr = {12, 45, 98, 73, 60};
​
        //定义一个变量,用于保存最大值
        //取数组中第一个数据作为变量的初始值
        int max = arr[0];
​
        //与数组中剩余的数据逐个比对,每次比对将最大值保存到变量中
        for(int x=1; x<arr.length; x++) {
            if(arr[x] > max) {
                max = arr[x];
            }
        }
​
        //循环结束后打印变量的值
        System.out.println("max:" + max);
​
    }
}

数组元素反转

数组中的元素颠倒顺序,例如原始数组为1,2,3,4,5,反转后的数组为5,4,3,2,1

实现思路
分析: 
把0索引和arr.length-1 交换 
把1索引和arr.length-2 交换 
把2索引和arr.length-3 交换
只要做到arr.length/2 即可 ,只做一半,不然又调回来了

代码实现
public static void main(String[] args) {
    int[] arr = {1,2,3,4,5};
    /*
        // 第一次交换
        int temp = arr[0];
        arr[0] = arr[arr.length - 1];// 把0索引和length-1 交换
        arr[arr.length - 1] = temp;// 最前面和最后面的进行交换
​
        // 第二次交换
        int temp2 = arr[1];
        arr[1] = arr[arr.length - 1 - 1];
        arr[arr.length - 1 - 1] = temp2;
​
        // 第三次交换
        int temp3 = arr[2];
        arr[2] = arr[arr.length - 1 - 2];
        arr[arr.length - 1 - 2] = temp3;
        
        //第n次交换。。。。
    */
    
        //用循环改进
        for(int x=0;x<arr.length/2;x++){
            int temp = arr[x];
            arr[x] = arr[arr.length - 1 - x];
            arr[arr.length - 1 - x] = temp;
        }
​
    // 反转后,遍历数组
    System.out.print("[");
    for(int x=0;x<arr.length;x++){
        if(x == arr.length-1){
            System.out.println(arr[x]);
        }else{
            System.out.print(arr[x]+",");
        }
    }
    System.out.println("]");
​
}

二维数组

什么是二维数组

二维数组其实就是这个二维数组中有多少个一维数组

二维数组格式

格式一

数据类型[][] 变量名 = new 数据类型[m][n];
  • 格式解释
    • m表示这个二维数组有多少个一维数组
    • n表示每一个一维数组的元素个数
  • 举例
            //格式一  静态初始值
            int[][] arr = new int[3][2];
    ​
            //这个二维数组中有 3个一维数组, 每一个一维数组有2个长度
            //拿到第一个一维数组
            System.out.println(arr[0][0]);
            System.out.println(arr[0][1]);
            System.out.println("=========第一个一维数组=========");
    ​
            arr[0][0] = 10;
            System.out.println(arr[0][0]);
            System.out.println(arr[0][1]);
            System.out.println("=================");
    ​
            //拿到第二个一维数组
            System.out.println(arr[1][0]);
            System.out.println(arr[1][1]);
    ​
            //拿到第三个一维数组
            System.out.println(arr[2][0]);
            System.out.println(arr[2][1]);
    ​

格式二

数据类型[][] 变量名 = new 数据类型[m][];
  • 格式解释
    • m表示这个二维数组有多少个一维数组
    • 这一次没有直接给出一维数组的元素个数,可以动态的给出
  • 举例
    //二维数组中有3个一维数组,但这一次并没有给出第一个一维数组的长度
    int[][] arr = new int[3][];
    ​
    // 第一个数组的元素个数为2
    arr[0] = new int[2];
    ​
    // 第二个数组的元素个数为3
    arr[1] = new int[3]
        
    // 第三个数组的元素个数为1
    arr[2] = new int[1];

格式三

标准版:
    数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}};
简化版:
    数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};

  • 举例
    int[][] arr =  {{1,2,3},{4,5},{6}};

二维数组遍历

  • 案例代码

        

public class ArrayCase {
    public static void main(String[] args) {
       
        // 定义二维数组
        int[][] arr = {{22, 66, 44}, {77, 33, 88}, {25, 45, 65}};

        //遍历第一个一维数组
        for(int x =0; x<arr[0].length; x++){
            System.out.println(arr[0][x]);
        }
        System.out.println("=====================");

        //遍历第二个一维数组
        for(int x =0; x<arr[1].length; x++){
            System.out.println(arr[1][x]);
        }
        System.out.println("=====================");

        //遍历第三个一维数组
        for(int x =0; x<arr[2].length; x++){
            System.out.println(arr[2][x]);
        }
        System.out.println("=====================");

        //用户循环改进y
        for (int y = 0; y <arr.length ; y++) {
            for(int x =0; x<arr[y].length; x++){
                System.out.println(arr[y][x]);
            }
            System.out.println();
        }
    }
}

标签:初始化,arr,Java,int,System,数组,println,out
From: https://blog.csdn.net/DominicT/article/details/142035404

相关文章

  • Java毕设项目II基于Spring Boot的在线远程考试系统设计与实现
    目录一、前言二、技术介绍三、系统实现四、论文参考五、核心代码六、源码获取全栈码农以及毕业设计实战开发,CSDN平台Java领域新星创作者,专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末一、前言随着信息技术的飞速发展和教育模式的不断......
  • 【JavaScript系列八】—讲述JS学习历程的知识分享!
    前言本篇主要讲述JS中较为重要的一环,函数的用法,深拷贝和浅拷贝的概念和区别,闭包和递归,包括一些案例:例如递归实现斐波那契数列,求阶乘等等一、关于函数定义函数的方式function关键字函数表达式(匿名函数)varfn=function(){}newfunction()函数的调用及其this指向普通函数—......
  • 【JavaScript系列九】—讲述JS学习历程的知识分享!
    前言本篇主要是讲述ES6的新增语法和相关运用一、ES6ES的全称是ECMAScript,它是由ECMA国际标准化组织,制定的一项脚本语言的标准化规范。泛指2015年6月之后发布的版本为什么使用ES6语言更加完善功能更加强大变量提升特性增加了程序运行时的不确定性语法过于......
  • Java中String、StringBuffer以及StringBulider的区别
    String、StringBuffer以及StringBulider的比较在Java中,String、StringBuilder和StringBuffer是三种用来表示和操作字符串的对象。它们之间的主要区别在于可变性、线程安全性和性能方面。下面是这些类的主要区别:可变性String:是不可变的(immutable)。这意味着一旦一个Str......
  • 【C++学习笔记】数组与指针(三)
    目录一、数组1.1数组声明与赋值1.2数组的特点特点1:任意类型均可创建数组特点2:固定大小特点3:内存连续且有序特点4:C++无数组下标越界错误特点5:数组变量不记录数据1.3遍历数组普通for循环foreach增强循环1.4字符数组1.5多维数组二维数组三维数组遍历二维数......
  • java导入json数据至doris
    表结构字段名称与json key名称一致:packagecom.ruoyi.doris;importcn.hutool.core.io.FileUtil;importcn.hutool.http.HttpRequest;importcn.hutool.http.HttpResponse;importcom.alibaba.fastjson.JSONArray;importcom.alibaba.fastjson.JSONObject;importlomb......
  • c++的初始化列表与const成员
    初始化列表与const成员const成员使用const修饰的类、结构、联合的成员变量,在类对象创建完成前一定要初始化。不能在构造函数中初始化const成员,因为执行构造函数时,类对象已经创建完成,只有类对象创建完成才能调用成员函数,构造函数虽然特殊但也是成员函数。在定义const成员时......
  • 某小厂Java开发岗面试复盘
    目录一:list和set区别二:HashSet是如何保证元素不重复三:HashMap是线程安全的吗?为什么 线程不安全四:HashMap的扩容机制 五:HashMap在1.7和1.8有啥区别六:对象的四种引用 七:获取反射的三种方法八:Arrays.sort和 Collections.sort的实现原理和区别九:数组在内存中是如何分......
  • 大数据新视界--大数据大厂之Java 与大数据携手:打造高效实时日志分析系统的奥秘
           ......
  • 【算法笔记】树状数组/Binary Indexed Tree/Fenwick Tree
    前言树状数组,即树形存储的数组,又称BinaryIndexedTree或FenwickTree。抛开它树形的存储结构,这种神奇的数据结构的应用看起来与「树」没什么关系:有一个序列\(A=(A_1,A_2,\dots,A_N)\),在不超过\(\mathcalO(\logN)\)的时间复杂度内完成下列操作:\(\to~\)求\([L,R]\)区间内所......