【JAVA】 一维数组

【JAVA】 一维数组,第1张

【本章内容】

1.一维数组

2.数组练习

1.一维数组

1.数组的定义:一个数组是由多个相同的数据类型元素组成的集合,这些元素在内存中顺序排列,是一段连续的空间,空间被所有元素平均分成多个小空间一一占用,每个小空间都有自己的标号(下标),由第一个小空间下标为0开始往后加一。(如图)

 

形象解释:来到酒店酒店廊道望过去有一排连续并列的房间,每个房间都有对应的门牌号,门牌号从0开始依次递增,每个房间中都有一个客人,当我们要访问指定的客人时,可通过客人所在房间的门牌号找到对应房间从而访问客人。


2.一维数组的3种初始化方式

    public static void main(String[] args) {
        int[] array = {1,2,3,4,5};
        int[] array2 = new int[]{1,2,3,4,5};
        int[] array3 = new int[5];

        System.out.println(Arrays.toString(array));
        System.out.println(Arrays.toString(array2));
        System.out.println(Arrays.toString(array3));

将3个数组分别打印观察,发现array与array2有指定的数值,是因为这两种方式对数组进行列初始化,而没有对array3进行初始化,只赋给列array3数组大小,编译器自动将元素数值为0.

如上图,三个数组名前的 int[] 代表数组的数据类型,array的写法是我们之后最常用的方式。array2与array3中都有一个关键字 --> new,new代表着是实例化一个对象,内存在堆上开辟。

(如图)

(变量在栈上,数据在堆上),这里对new先不表,会在之后的博客进行介绍


3.数组的使用

数组访问:数组访问依靠下标,数组在内存空间中是一段连续的空间,下标编号0从第一个元素开始依次递增,我们可以通过下标来访问数组中任意一个元素。

    public static void main(String[] args) {
        int[] array = {11,22,33,44,55};
        System.out.println(array[0]);
        System.out.println(array[1]);
        System.out.println(array[2]);
        System.out.println(array[3]);
        System.out.println(array[4]);
    }

 

如图,我们可以通过对应的下标来访问我们想要访问的元素。 

但是有一点需要注意,那就是越界访问的问题。如果我们访问的下标超过来数组的最大下标大小,则会出现越界访问的异常

 如上图,我们访问了下标5但是实际下标最大为4的数组,超出了访问范围,从而出现异常。


4.遍历数组的方式

    /**
     * 数组3种遍历
     * @param args
     */
    public static void main5(String[] args) {
        int[] arr = {1,2,3,4,5};
        //下标循环遍历
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
        //for each遍历
        for(int x:arr){
            System.out.print(x+" ");
        }
        System.out.println();
        //Arrays:以字符串方式打印
        String ret = Arrays.toString(arr);
        System.out.println(ret);
    }

 (1)for遍历

这种遍历方式我们实质是采用下标来访问数组,注意到for循环的表达式2:i < arr.length  由于Java的方便性,java直接给我们提供了确定数组大小的便捷。

   (2)for each遍历

观察圆括号()中的两个参数 int x 代表的是这个数组的数据类型,arr代表的是要遍历的数组,之后打印出来即可(注意打印格式)

(3)Arrays工具类之 toString:以字符串方式对数组进行打印

Arrays是Java中的工具类,可以理解为返回值为数组字符串的方法,因此我们要用String数据类型进行接收返回值,之后直接打印返回值即可

以上就是一维数组的3种遍历方式。


5.数组是引用类型

我们考察一下基本类型变量与引用类型变量的区别

在main中我们设置了3个变量,分别是a , b , array,其中a与b是基本类型变量,array是引用类型变量,在内存中,有栈和堆,简单来说栈存变量,堆存数据(对象)(这是个人理解), a 与b 赋值为10与20,是内置类型的变量,因此其空间中保存的就是给该变量初始化的值。

而array是数组类型的引用变量,保存的内容是数据的地址,数据在堆中。与C语言的指针类似
 

下面来深入理解数组的引用变量

    public static void main(String[] args) {

        int[] array = {1,2,3,4,5};

        int[] array2 = {100,200,300,400,500};

        array = array2;//把array2的地址给给array,array此时指向array2的数据

        array[0] = 1;
        array[1] = 2;

        System.out.println(Arrays.toString(array2));

    }

 如图,我们创建了array与array2两个数组,这两个变量分别存了自身数据的地址,假设array存了0x888的地址,指向了数据{1,2,3,4,5,},同理array2存了0x999地址,指向{100,200,300,400,500},当我们赋值array2给array,此时array与array2共用一个地址,共同指向了数据{100,200,300,400,500},当我们修改array的前两个数据,也相当于修改了array2的前两个数据。打印array2证明思路正确。


6.认识null

 


7.数组作为函数参数,数组作为函数返回值

数组作为函数参数进行传参,比如说我们写一个打印数组的方法

    public static void print(int[] arr){
        System.out.println(Arrays.toString(arr));
    }

    public static void main(String[] args) {
        int[] array = {1,2,3,4,5};
        print(array);
    }

数组作为函数返回值,相当于返回数组的地址,说明可以一次性返回多个值,不像C语言一次只能返回一个值

    /**
     * 数组作为参数返回,相当于返回数组的地址
     * @return
     */
    public static int[] test3(){
        int[] tmp = {1,2,3,4,5};
        return tmp;//返回数组
    }

    public static void main2(String[] args) {
        int[] ret = test3();
        System.out.println(Arrays.toString(ret));
    }

数组练习放在下一篇博客


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/906180.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-15
下一篇 2022-05-15

发表评论

登录后才能评论

评论列表(0条)

保存