详解数组


一、数组的基本用法

1.数组是什么?

数组也是一种数据结构,它本质上就是让我们能“批量”创建想同类型的变量。数组是引用类型,引用指向的是一个对象,也可以说,有地址的变量就称为引用。
注意:在Java中,数组中的变量必须是相同类型的。

2.数组的创建

数组的创建有三种方法:
// 动态初始化
数据类型[] 数组名称 = new 数据类型 [] { 初始化数据 };
// 静态初始化
数据类型[] 数组名称 = { 初始化数据 };
代码示例:

        int[] array2 = new int[] {1,2,3,4,5};
        int[] array3 = new int[5];
        int[] array1 = {1,2,3,4,5};//常用

在这里插入图片描述

3.数组的使用

(1)访问数组中的元素时利用角标,读取数组长度时使用数组名.length获取,用角标访问元素。

int[] array = {1,2,3,4,5};
System.out.print("访问数组元素:" + array[0]);
Systen.out.print("访问数组长度:" + array.length);

注意:访问数组长度array.length"的"."符号表示调用,也是成员访问操作符.方括号中放的是角标,数组中从0开始。访问数组元素时,不能超过数组的长度,否则会出现数组越界的异常。

(2)数组的遍历,打印数组
打印数组有三种方法:for循环,foreach循环(增强for循环),Arrays.toString()
代码示例:

		 int[] array = {1,2,3,4,5};
        for (int i = 0; i < array.length; i++) {
            System.out.print(array[i] + " ");
        }
        System.out.println();
        for (int x:array
             ) {
            System.out.print(x + " ");
        }
        System.out.println();
        System.out.println(Arrays.toString(array));

运行结果
在这里插入图片描述
for与foreach的区别:
对于for来说,可以利用i来对数组进行改变元素值、求元素位置等操作。而foreach只能遍历数组,而不能进行角标操作。
Arrays.toString()是操作数组工具类,直接从库中调用的。

二、数组作为方法的参数

1.基本用法

public static void printArray(int[] a) {
	for (int x : a) {
	System.out.println(x);
	}
}
public static void main(String[] args) {
	int[] arr = {1, 2, 3};
	printArray(arr);
}

这个代码中,int[] a是函数形参,int[] arr是函数的实参,我们在传参时传的是引用。

2.理解引用类型

import java.util.Arrays;

public class transformArray {
    /**
     * 传参传的是引用
     * 修改原数组的值
     * 使原数组的值都是原来的二倍
     * @param args
     */
    public static int[] tArray(int[] array){
        for (int i = 0; i < array.length; i++) {
            array[i] *= 2;
        }
        return array;
    }
    public static void main(String[] args) {
        int[] array = {1,2,3,4,5};
        int[] arr = tArray(array);
        System.out.println(Arrays.toString(array));
        System.out.println(Arrays.toString(arr));
    }
}

在这个代码中,我们重新定义了一个数组,改变原数组值后存入了新数组中,所以原数组元素值不变。
在这里插入图片描述

3.认识null

null 在 Java 中表示 “空引用” , 也就是一个无效的引用。null 的作用类似于 C 语言中的 NULL (空指针), 都是表示一个无效的内存位置. 因此不能对这个内存进行任何读写操作。 一旦尝试读写, 就会抛出NullPointerException(空指针异常)

三、数组作为方法的返回值

代码示例:

import java.util.Arrays;

public class reverse {
    /**
     * 逆序输出数组
     * @param args
     */
    public static  int[] reverse(int[] array){
        int tmp = 0;
        int i = 0;
        int j = array.length-1;
        while (i < j){
            tmp = array[i];
            array[i] = array[j];
            array[j] = tmp;
            i++;
            j--;
        }
        return array;
    }
    public static void main(String[] args) {
        int[] array = {1,2,3,4,5,6};
        int[] ret = reverse(array);
        System.out.println(Arrays.toString(ret));
    }
}

由于数组是引用类型,返回时只是将这个数组的首地址返回给函数调用者,此方法没有拷贝数组内容,从而比较高效。
备注:函数类型为int[] 型!

四、数组的其他应用

1.数组转字符串

import java.util.Arrays
	int[] arr = {1,2,3,4,5,6};
	String newArr = Arrays.toString(arr);
	System.out.println(newArr);

运行结果
在这里插入图片描述
注意:代码中,Arrays,toString()是库函数,直接调用,其实我们也可以写一个我们自己的数组转字符串函数

public class myselfTostring {
    /**
     * 实现自己的数组转字符串
     * @param args
     */
    public static String toString(int[] array){
        String str = "[";
        for (int i = 0; i < array.length; i++) {
            str = str + array[i];
            if(i != array.length -1){
                str += ",";
            }
        }
        str += "]";
        return str;
    }
    public static void main(String[] args) {
        int[] array = {1,2,3};
        String ret = toString(array);
        System.out.println(ret);
    }
}

2.数组拷贝

数组的拷贝又被称作克隆,数组的克隆共有四种方法:for循环,Arrays.copyOf(),System.arrayCopy(),数组名.clone。
其中System.arrayCopy()效率最高

import java.util.Arrays;

public class copyArray {
    /**
     * 拷贝数组
     * for循环
     * Arrays.copyOf()
     * System.arrayCopy();这种方法参数较多,里面有5可参数,分别是原数组,原数组位置,拷贝后数组,拷贝后数组位置,拷贝长度
     * 数组名.clone();需要用int来接收
     * @param args
     */
    public static void copyOf(int[] array){
        int[] ret = new int[array.length];
        for (int i = 0; i < array.length; i++) {
            ret[i] = array[i];
        }
        System.out.println(Arrays.toString(ret));
    }
    public static void main(String[] args) {
        int[] array = {1,2,3,4,5};
        System.out.print("Arrays.toString()方法拷贝:");
        System.out.println(Arrays.toString(array));
        int[] ret =new int[array.length];
        System.out.print("for循环方法拷贝:");
        copyOf(array);
        System.out.print("Arrays.copyOf()方法拷贝:");
        int[] newArr = Arrays.copyOf(array,array.length);
        System.out.println(Arrays.toString(newArr));
        System.out.print("数组名.arraycopy()方法拷贝:");
        System.arraycopy(array,0,ret,0,array.length);
        System.out.println(Arrays.toString(ret));
        System.out.print("array.clone()方法拷贝:");
        int[] rrt = array.clone();
        System.out.println(Arrays.toString(rrt));
        System.out.print("拷贝某一范围:");
        System.out.println(Arrays.toString(Arrays.copyOfRange(array,1,4)));
    }
}

运行截图
在这里插入图片描述
备注:如果数组中存放的是基本数据类型,则引用类型是浅拷贝,如果拷贝完之后,通过引用改变拷贝的值,不影响原数组成为深拷贝。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

心事付流年

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

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

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

打赏作者

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

抵扣说明:

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

余额充值