前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【Java】04 数组

【Java】04 数组

作者头像
Demo_Null
发布2020-09-28 11:03:25
3180
发布2020-09-28 11:03:25
举报
文章被收录于专栏:Java 学习

数组是编程语言中最常见的一种数据结构,可用于存储多个数据,每个数组元素存放一个数据,通常可通过数组元素的索引来访问数组元素,包括为数组元素赋值和取出数组元素的值。

一、一维数组

1.1 定义数组

初始化:   静态初始化:初始化时由程序员显式指定每个数组元素的初始值,由系统决定数组长度。   动态初始化:初始化时程序员只指定数组长度,由系统为数组元素分配初始值。

语法:

代码语言:javascript
复制
// 只定义数组长度
数据类型[] 数组名 = new 数据类型[数组长度];	// int[] arr = new int[5];

// 定义时直接给出数组元素
数据类型[] 数组名 = new 数据类型[] {元素1, 元素2, ··· , 元素n};		// int[] arr = new int[] {1, 2, 3, 4, 5};
数据类型[] 数组名 = {元素1, 元素2, ··· , 元素n};	// int[] arr = {1, 2, 3, 4, 5};

注意:   数组名中存储的是数组的地址并不是数组本身,直接打印会打印出数组的哈希地址值

代码语言:javascript
复制
public class Test {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        System.out.println(arr);
    }
}

  数组元素的数据类型决定了数组的数据类型,数组中只能存在同一种数据类型的元素

1.2 数组的赋值、取值

1.2.1 赋值

初始化赋值:

代码语言:javascript
复制
int[] arr = {1, 2, 3, 4, 5}

逐一赋值:

代码语言:javascript
复制
int[] arr = new int[3];
arr[0] = 1;
arr[1] = 2;
arr[2] = 3;

注意:  数组的第一个元素是由 0 开始的

拓展:    一旦为数组的每个数组元素分配了内存空间,每个内存空间里存储的内容就是该数组元素的值,即使这个内存空间存储的句容是空,这个空也是一个值(null)。不管以哪种方式来初始化数组,只要为数组元素分配了内存空间,数组元素就具有了初始值。故不能只分配内存空问,不赋初始值。

1.2.2 取值

  数组的取值直接使用 数组名[index] 取值

代码语言:javascript
复制
int[] arr = {1, 2, 3, 4, 5};
System.out.println(arr[0]);		// 1

1.3 数组的相关操作

1.3.1 数组的长度

  初始化数组时会在内存中分配内存空间,内存空间的大小决定了一维数组能够存储多少个元素,也就是数组长度。如果不知道数组的长度,可以使用数组对象自带的 length 属性获取

代码语言:javascript
复制
int[] arr = {1, 2, 3, 4, 5};
System.out.println(arr.length);		// 5
1.3.2 数组的遍历

分析:   遍历数组需要逐一将元素从数组中取出来。

代码语言:javascript
复制
int[] arr = {1, 2, 3, 4, 5};
int a = arr[0];    //index = 0; a = 1
int b = arr[1];    //index = 1; b = 2
int c = arr[2];    //index = 2; c = 3
int d = arr[3];    //index = 3; d = 4
int e = arr[4];    //index = 4; e = 5

  通过上面可以知道,将数组逐一取出只需要将 index++ 即可。   故可以通过循环来实现数组的遍历

实现:

代码语言:javascript
复制
public class Test {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};

		// 数组的最小索引为 0,最大索引为 arr.length - 1
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}
1.3.3 数组的最值

分析:   假设第 0 号元素是最值   将数组中其他元素注意拿出来与第 0 号元素进行比较。   若其他元素大于/小于当前最值,则覆盖当前最值。

实现:

代码语言:javascript
复制
public class Test {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        int max = arr[0];       //假设 arr[0] 是最大值
        int min = arr[0];       //假设 arr[0] 是最小值

        //遍历数组
        for (int i = 0; i < arr.length; i++) {
            //若数组元素大于 max 则替换 max
            if (max < arr[i]) {
                max = arr[i];
            }
            //若数组元素小于 min 则替换 min
            if (min > arr[i]) {
                min = arr[i];
            }
        }

        System.out.println("最大值为:" + max + "最小值为:" + min);
    }
}
1.3.4 数组的反转

分析:   将第 0 号元素与第 length - 1 号元素对换。   将第 1 号元素与第 length - 2 号元素对换。   ···   将第 m 号元素与第 n 号元素对换。   直到所有元素对换完毕,即:m > length / 2 或 m > n

实现:

代码语言:javascript
复制
public class Test {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};
        int temp;       //声明一个临时变量

        for (int i = 0; i < arr.length / 2; i++) {
            //进行交换操作
            temp = arr[i];
            arr[i] = arr[arr.length - i - 1];
            arr[arr.length - i - 1] = temp;
        }
    }
}

二、二维数组

   若将一维数组理解为一层房间,那么二维数组就可以理解为整栋楼的房间。二维数组的每一个元素都是一个一维数组。

2.1 定义二维数组

代码语言:javascript
复制
// 可以省略 列,不能省略 行
int[][] arr = new int[2][3];

// 定义时直接给出数组元素
int[][] arr = new int[][] {{1, 2}, {3, 4}, {5, 6}};
int[][] arr = {{1, 2}, {3, 4}, {5, 6}};

2.2 注意事项

  左行右列

  初始化时只给定行,不给定列时可以创建不规则数组

代码语言:javascript
复制
int[][] arr = new arr[3][];
arr[0] = {1, 2, 3};		// 第一行分配 3 个
arr[1] = {5, 6}			// 第二行分配 2 个
arr[2] = {4, 7, 8, 9}	// 第三行分配 4 个

三、初见异常

3.1 索引越界异常(IndexOutOfBoundsException)

   见名知义,就是索引超过了数组所规定的界限(即超出了数组索引的最大范围)

代码语言:javascript
复制
public class Test {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5};

        System.out.println(arr[5]); //当前索引最大值为 4 ,却要打印索引为 5 的元素。
    }
}

3.2 空指针异常(NullpointException)

   空指针异常就是数组名并没有指向一个地址

代码语言:javascript
复制
public class Test {
	public static void main(String[] args) {
	    int[] arr = null;   //定义一个数组,地址值为空
	
	    System.out.println(arr[0]); //当前数组名并没有指向一个数组空间,却要打印一个不存在的元素
	}
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/04/09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、一维数组
    • 1.1 定义数组
      • 1.2 数组的赋值、取值
        • 1.2.1 赋值
        • 1.2.2 取值
      • 1.3 数组的相关操作
        • 1.3.1 数组的长度
        • 1.3.2 数组的遍历
        • 1.3.3 数组的最值
        • 1.3.4 数组的反转
    • 二、二维数组
      • 2.1 定义二维数组
        • 2.2 注意事项
        • 三、初见异常
          • 3.1 索引越界异常(IndexOutOfBoundsException)
            • 3.2 空指针异常(NullpointException)
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档