Java从入门到精通05==》流程控制foreach、深谈数组、多维数组、数据工具Arrays类

本文介绍了Java中的流程控制,特别是foreach循环的使用,强调了不能在foreach中修改数组元素。深入探讨了数组的概念,包括内存中的表示、数组异常如越界和指针为空的情况。此外,还讲解了多维数组的创建和操作,以及Arrays类提供的实用方法,如排序、转换、比较和填充数组。
摘要由CSDN通过智能技术生成

Java从入门到精通05

2023.7.21

一、流程控制foreach(又名for强循环)

Java5之后出现了for的强循环,这种循环遍历集合和数组更加便捷,使用时无需考虑集合或者数组的长度,也无需根据索引来访问集合或数组元素,foreach会自动遍历集合或数组的每一个元素。

格式:
for(数组/集合元素类型:数组/集合对象名){
循环体//自动迭代访问每一个元素
}

注意:当想改变数组元素时,切记不要使用foreach(for强循环结构)!!!

二、深谈数组

1.内存中的数组

为啥说数组是引用变量,那是因为数组引用变量只是一个引用,他的数据存在堆区,详细请看下图。
在这里插入图片描述

2.数组异常情况

1.越界

简单说如定义一个长度为x的数组,它的索引最大应为x-1,所以当索引大于或等于x时,系统会报错.

public class Demo2 {
    public static void main(String[] args) {
        int [] arr =new int[5];
        System.out.println(arr[5]);
    }
}

在这里插入图片描述数组值定义了五个长度,最大索引为4,所以当输出arr[5]时,系统报错

2.指针为空
public class Demo3 {
    public static void main(String[] args) {
        int [] arr=new int[]{2,5,8,0};
        arr=null;
        System.out.println(arr[0]);
    }
}

在这里插入图片描述
当定义一个数组arr,数组变量arr被赋予null时,该数组仍然在堆区存在,只是arr在栈区的地址索引丢失,所以Java找不到原本数组元素所在位置,所以会报错。

3.所谓的多维数组

多为数组即数组的元素还是数组,本质也就是最外面的数组依然是一个以为数组。

以二维数组为例

和正常数组一样,依然存在静态初始化和动态初始化这一说法。
静态初始化

格式:
数据类型[][] 数组名=new int[][]{
元素…
}
也可以是
数据类型[][] 数组名={元素…}

动态初始化

格式:
数据类型 [][]数据名=new 数据类型[m][n]

public class Demo4 {
    public static void main(String[] args) {
        int [][]arr=new int[5][10];
    }
}

此时分配情况如图所示
在这里插入图片描述
赋值

格式:
数组名[索引][索引]=数据;

取值

  • 直接取值
    System.out.print(数组名[索引][索引]);
  • 赋值取值
    变量=数组名[索引][索引];
    System.out.print(变量);
public class Demo4 {
    public static void main(String[] args) {
        int [][]arr=new int[5][10];
        arr[2][8]=16;
        System.out.println(arr[2][8]);
        int a=arr[2][8];
        System.out.println(a);
    }
}

在这里插入图片描述

三、数组工具Arrays类

Arrays.toString(数组名)

此方法将数组转为字符串,按顺序把多个数组元素链接在一起,多个数组元素之间有",“与” "隔开。

import java.util.Arrays;

public class Demo5 {
    public static void main(String[] args) {
        int[] arr={1,2,3,4,5,6,7,8,9};
        System.out.println("arr数组元素为:"+ Arrays.toString(arr));
    }
}

在这里插入图片描述

Arrays.sort(数组名)

此方法将数组排序(从小到大)

import java.util.Arrays;

public class Demo5 {
    public static void main(String[] args) {
        int[] arr={82,74,31,48,52,46,78,88,19};
        Arrays.sort(arr);
        System.out.println("arr数组元素为:"+ Arrays.toString(arr));
    }
}

在这里插入图片描述

Arrays.equals(数组1名,数组2名)

判断两个数组长度和元素是否相同,如果均相同则返回true

import java.util.Arrays;

public class Demo6 {
    public static void main(String[] args) {
        int[]arr1={1,2,3,4};
        int[]arr2={1,2,3,4};
        System.out.println("两数组相等:"+ Arrays.equals(arr1,arr2));
    }
}

在这里插入图片描述

数据类型(不确定用var) 新数组名=Arrays.copyOf(被复制的数组名,新数组的长度)

新数组默认从旧数组的第一个元素开始复制,若新数组元素个数大于旧数组元素个数,则新数组超过部分均为null

import java.util.Arrays;
public class Demo7 {
    public static void main(String[] args) {
        int [] a={1,2,3,4,5,6};
        var b= Arrays.copyOf(a,4);
        var c=Arrays.copyOf(a,10);
        System.out.println("a数组元素为:"+ Arrays.toString(a));
        System.out.println("b数组元素为:"+ Arrays.toString(b));
        System.out.println("c数组元素为:"+ Arrays.toString(c));
    }
}

在这里插入图片描述

Arrays.fill(数组名,开始索引(包括),结束索引(不包括),新值)

将数组的第a个元素到第b个元素重新赋值

import java.util.Arrays;

public class Demo8 {
    public static void main(String[] args) {
        int []a={1,2,3,4,5,6,7,8,9};
        //将第三个元素到第五个元素赋为新值9
        Arrays.fill(a,2,5,9);
        System.out.println("新的数组为:"+Arrays.toString(a));
    }
}

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我头像真的只是只猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值