Java数组及其类方法

1、定义

        数组在Java中的定义和c语言中的相同,都是:相同类型元素的集合。下面我们看看如何定义一个数组,以下是初始化数组的三种形式。

            int[] arr1 = {1,2,3,4};       
            int[] arr2 = new int[10];
            int[] arr3 = new int[]{1,2,3,4};

        可以看到等号左边均是数组类型+数组名,等号右边如果初始化空间不能对数组进行赋值,如果赋值则不能初始化空间,Java会根据你大括号中的值的个数初始化空间。

2、遍历数组

        Java遍历数组一共有两种方法,下面是这两种方法的代码:

int[] array1 = {1,2,3,4};
for (int i = 0; i < array1.length; i++) {
            System.out.print(array1[i] + " ");
        }

        可以看到,Java中遍历数组并不像C语言那样,还需要通过计算去求数组的长度,它可以直接通过数组名.length求的数组的长度。下面还有一种更安全的遍历数组的方法 :

int arr1 = {1,2,3,4}; 
for(int x : arr1){          //使用for else遍历数组
                System.out.println(x + " ");
            }

         这是使用for else遍历数组的方法,为什么说它更安全呢?这是因为:使用它不会获取到数组的下标。

3、深入理解数组

      Java有两种数据类型,分别是基本数据类型引用数据类型。数组属于其中的引用数据类型,那么什么是引用数据类型呢?当前这个变量存储的是地址就是引用数据类型的特点。

        那么数组到底存储在哪里呢?不要着急,我们先通过一张图来认识下JVM的内存划分:

        如上图就是JVM的内存划分,而我们的数组就存储在堆中,那么在我们的main方法中是如何调用数组的呢?下面我们通过一张图来了解了解:

        如图所示我们称array这个引用指向了数组对象,而下面的代码则表明了array2这个引用也指向了array这个引用指向的数组对象

array2 = array;

        

        我们可以通过任一一个数组的值来改变它的值,代码如下:

public static void main(String[] args) {
            int[] arr1 = {1,2,3,4};
            int[] arr2 = null;      //arr2引用指向空对象
            arr2 = arr1;            //将arr1这个引用指向arr2这个引用指向的对象
            arr2[0] = 100;          //两个引用都可以修改这个对象的值
            arr2[1] = 200;
            for(int x : arr1){          //使用for else遍历数组
                System.out.println(x + " ");
            }
    }
}

        下面我们通过两个有关数组的方法,来检验下我们学习的成果:

1、

public static void fac1(int[] array){
         array = new int[10];           //形参数组指向一个新的对象,并不影响实参的指向
        //array = null;
    }
 public static void main(String[] args) {
        int [] array1 = {1,2,3,4};
        fac1(array1);
        for (int i = 0; i < array1.length; i++) {
            System.out.print(array1[i] + " ");
        }
    }

这是输出的结果:

        相信应该有和博主一样认为会输出10个0的同学对这个结果感到震惊吧!!!下面博主继续通过图解来解释一波。

        由图解可知:方法中的代码使形参引用指向了另外一个对象,而方法结束形参销毁 ,堆里存储数组没人指向它,如果一个对象没有人指向它,那么JVM会自动把它回收掉。因此,它并不会影响实参数组的值。

2、

public static void fac2(int[] array){
        array[0] = 99;          //都指向同一对象,因此会改变array2[0]的值
    }
    public static void main(String[] args) {
        int [] array2 = {1,2,3,4};
        fac2(array2);
        for (int i = 0; i < array2.length; i++) {
            System.out.print(array2[i] + " ");
        }
    }

这是输出的结果:

下面是图解:

        由于,形参和实参的引用都指向同一对象,所以可以通过新参的引用改变对象的值。

4、数组的类方法 

        使用数组的类方法,能够极大的提高我们写数组代码的效率,下面是一些数组的类方法。

String str = Arrays.toString(arr)//将数组转为字符串的形式
int[]arr2 = Arrays.copyOf(arr1,arr1.length);//将数组arr1的内容拷贝给arr2
//**************************************************************************
//拷贝的其它形式:
 System.arraycopy(arr1,0,arr2,0,arr1.length);//原数组,原数组开始拷贝的位置,目的数组,目的数组的哪个位置,拷贝的长度
//数组扩容
//若超出范围,则能拷贝多少拷贝多少,后面补0
        int[]arr3 = Arrays.copyOf(arr1,arr1.length * 2);
//拷贝下标[1,4)的元素
   int[]arr4 = Arrays.copyOfRange(arr1,1,4);
//**************************************************************************
 Arrays.sort(arr3);//对数组进行排序
Arrays.binarySearch(arr3, 4)//对数组中的4进行二分查找
Arrays.equals(arr3, arr4)//比较数组对应位置的元素是否相同,返回bool类型
//**************************************************************************
//填充
Arrays.fill(arr,100);//将100填充进arr里
 Arrays.fill(arr,1,4,1);//在[1,4)位置里填充1

         如果想要了解更多的数组类方法,那么你可以下载一个Java的帮助手册,里面包含着所有类的各种方法。

        这是其他两位博主提供的使用说明和下载链接:

        使用说明:掌握Java JDK 1.8 API帮助文档中文版,事半功倍编程_jdk帮助文档-优快云博客

        下载链接:探索JDK 1.8 API中文版:助力Java开发者的高效工具箱-优快云博客 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值