Java学习——数组

本文详细讲解了Java数组的基础定义、长度获取、元素访问与修改、遍历方法,以及与函数的交互,包括数组作为返回值、Arrays工具的使用,如复制、查找、排序和填充。此外,还特别关注了二维数组的定义、打印和常见操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、定义数组

方法一:

方法二(方法一的简写):

方法三:

二、 求数组长度(数组元素个数)

三、如何处理数组当中的元素及数组下标相关问题

访问数组当中的元素:

修改数组当中的元素: 

四、数组遍历

方法一:for循环(要用下标)

方法二:for each

方法三:工具类Arrays

五、数组与函数

 六、数组作为返回值

 七、Arrays工具类

1.以字符串形式打印数组

2. 数组拷贝

①Arrays.copyOf

②范围拷贝(拷贝数组的一部分):

③产生副本

3.二分查找

4.冒泡排序

5.数组填充

八、二维数组

1.三种基本的定义二维数组的方式

2.二维数组的打印

①利用.length

②双重foreach

③利用Ararrys


一、定义数组

方法一:

int[] arr2 = new int[]{1, 3, 5};

方法二(方法一的简写):

int[] arr = {1, 3, 5};

①这两种方法虽然没有指定数组的长度,但编译器在编译时会根据{}中的元素个数来确定数组的长度。

②这两种方法初始化之后,想要再初始化就必须以如下形式:

arr = new int[]{1,2,3};否则编译器报错

方法三:

int[] arr3 = new int[3];

注意:①方法一、二的[]里面都不要写数字。

②数组没有初始化的时候,默认值如下表

数组中存储的是引用类型的时候,默认值为null。

补充:

1.

int[] arr = {1, 3, 5};
System.out.println("arr:"+arr);

运行结果

“[”表示这是数组类型

“I”表示数组存的是整数

@后面表示的是地址的哈希值(可以理解为地址)

arr是一个存地址的变量,称这个变量为引用变量简称引用。在引用变量当中存储了对象的地址。数组变量里面存储的就是对象的地址。

2.

数组必须初始化,否则使用时会报错。

 不知道初始化什么的时候用null,意思就是,arr这个引用不指向任何对象,所以在使用的时候会报错!!!

 报错的意思是:空引用(指针)异常,一般出现这种报错就看看哪个引用为null。


二、 求数组长度(数组元素个数)

数组名.length

System.out.println(arr.length);

三、如何处理数组当中的元素及数组下标相关问题

数组名[合法的下标]。合法的下标:0~数组元素个数(数组长度)-1

访问数组当中的元素:

int[] arr = {1, 3, 5};
System.out.println(arr[0]);

修改数组当中的元素: 

int[] arr = {1, 3, 5};
arr[0] = 7;
System.out.println(arr[0]);

当使用不合法的下标时:

 称之为数组越界异常

四、数组遍历

方法一:for循环(要用下标)

int[] arr = {5, 6,  7, 8};
for (int i = 0; i < arr.length; i++) {
     System.out.print(arr[i] + " ");
}

方法二:for each

for each(没有用到下标)循环当中需要用下标判断数据的时候,不适合用for each

int[] arr = {5, 6,  7, 8};
for (int a :arr) {
    System.out.print(a + " ");
}

for(数组中元素的类型:数组名){}

方法三:工具类Arrays

import java.util.Arrays;

public class TestDemo {
    public static void main(String[] args) {
        int[] arr = {5, 6,  7, 8};
        String ret = Arrays.toString(arr);//将传进来的数组以字符串形式输出
        System.out.println(ret);
    }

 一定要引入

输出效果


五、数组与函数

public class TestDemo {
    public static void func(int[] arr1){
        arr1 = new int[]{1, 2, 3};
    }
    public static void func2(int[] arr2){
        arr2[0] = 9 ;
    }
    public static void main(String[] args) {
        int[] arr = {7, 7, 7};
        func (arr);
        func2(arr);
        System.out.println(Arrays.toString(arr));
    }
}

运行结果:

 解答:(地址均为假设地址)

最开始:

执行func第一行:改变了arr1指向的对象(就好像0x77不再属于arr1,此时arr1无论做什么都和0x77无关)

执行func2第一行:arr2通过0x77访问到{7, 7, 7},并通过arr2【0】 = 9对 

 中第一个元素进行赋值。

 六、数组作为返回值

public class TestDemo {
    public static int[] func(){
        int[] arr1 = {7, 7, 7};
        return arr1;
    }
    public static void main(String[] args) {
        int[] arr1 = func();
        System.out.println(Arrays.toString(arr1));
    }
}

 七、Arrays工具类

注:使用Arrays工具类的时候一定要引用

import java.util.Arrays;

1、以字符串形式打印数组

Arrays.toString(数组名)。如果需要接收对象,那接收对象的类型一定是Atring类型
public static void main(String[] args) {
        int[] arr1 = {7,8,9};
        System.out.println(Arrays.toString(arr1));
        System.out.println("------------------------");
        String ret = Arrays.toString(arr1);
        System.out.println(ret);
    }

2. 数组拷贝


①Arrays.copyOf(想要拷贝的数组名,新数组的长度);当新数组的长度>想要拷贝的数组的数组长度时,会对接收数组进行扩容;当新数组的长度<想要拷贝的数组的数组长度时,会只拷贝片段。

int[] arr1 = {7,8,9};
int[] copy = Arrays.copyOf(arr1,arr1.length * 2);
System.out.println(Arrays.toString(copy));

 ②范围拷贝(拷贝数组的一部分):

Arrays.copyOfRange(想要拷贝的数组名,起始下标,结束下标),注:拷贝的其实是【起始下标,结束下标)也就是拷贝到结束下标前一个截止

int[] arr1 = {7,8,9,11,15};
int[] copy = Arrays.copyOfRange(arr1,1,3);
System.out.println(Arrays.toString(copy));

 tips:

 Java中,from,to一般都是左闭右开的[from,to)

③产生副本

clone();产生对象的一个副本;相当于克隆
int[] arr1 = {7,8,9,11,15};
int[] copy = arr1.clone();
System.out.println(Arrays.toString(copy));

 ④

和①底层代码差不多,但是少调用一次函数

System.arraycopy(要拷贝的数组,从这个数组的哪个下标开始拷贝,拷贝的目标数组,从目标数组的哪个下标开始拷贝,拷贝的长度)
int[] arr1 = {7,8,9,11,15};
int[] copy = new int[arr1.length];
System.arraycopy(arr1,2,copy,0,arr1.length - 2);
System.out.println(Arrays.toString(copy));

3.二分查找

Arrays.binarySearch(在哪个数组中查找,要查找的数据),由于它的返回值是int所以要用int类型进行接收,没有要找的数据时会返回一个负数。
    public static void main(String[] args) {
        int[] arr = new int[]{1, 5, 9, 11, 15};
        int key = Arrays.binarySearch(arr, 11);
        System.out.println(key);
    }

 4.冒泡排序

Arrays.sort(数组名);
public static void main(String[] args) {
        int[] arr = {1, 5, 19, 11, 15};
        Arrays.sort(arr);
        int key = Arrays.binarySearch(arr,11);
        System.out.println(key);
    }

5.数组填充

Arrays.fill(数组名,起始下标,终止下标+1,想填充的数据);

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

八、二维数组

1.三种基本的定义二维数组的方式

    public static void main(String[] args) {
        int[][] arr1 = {{1,2,3},{4,5,6}};
        int[][] arr2 = new int[3][4];
        int[][] arr3 = new int[][]{{1,2,3},{4,5,6}};
    }

Java会根据arr1中的{}来判断二维数组的行和列。

注:定义时可以省略列但不能省略行。数组中列的长度不一样时,称之为不规则数组

2.二维数组的打印

①利用.length

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

②双重foreach

    public static void main(String[] args) {
        int[][] arr1 = {{1,2,3},{4,5,6}};
        for (int[] tmp:arr1) {
            for (int a:tmp) {
                System.out.print(a + " ");
            }
            System.out.println();
        }
    }

 

 ③利用Ararrys

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

记得点赞收藏哦!

wink~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值