Java中的数组

Java中的数组

当我们在使用一组数据的时候,如果一个一个的去定义,会非常的麻烦,效率非常低,这个时候我们可以直接定义一个数组把这组数据放进去,如果需要使用这一整组数据,我们直接遍历这个数组就可以了,如果使用的是单独的一个数据,我们就直接输出这个数据对应的数组下标即可。下面我们就来认识一下数组:

一 、数组的概念
存放有限个相同数据类型的变量的集合,我们把它叫作数组。数组的内存是连续的。所以需要开辟连续的内存空间。数组的长度就等于数组当中元素的个数。Java中的数组是在堆上分配内存,不是栈上。

二、数组的定义
数组有三种定义方式,从本质上来说这三种方式没有什么区别。不过需要注意的是第三个是没有赋值的,要赋值的话也是一个一个的赋值。比较麻烦,所以我们一般用的都是第一个或者第二个。

int[] arr = {1,2,3,4};
int[] arr = new int [] {1,2,3,4};
int[] arr = new int [4]  //此时数组里面放的是四个0,数组没有初始化里面默认就是0

*注:
①:new:实例化一个对象,此时的对象就是数组。

②:arr是一个数组的名字,是一个变量名,它是引用类型,是在栈上开辟内存。当我们输出它的时候输出的是后面数组对应的堆上的地址,并且这个地址也是经过哈希处理了的,并不是真实的地址。

③:arr是一个引用类型的变量,它指向了后面的这个数组对象,也可以说成它引用了这个数组对象,我们可以通过操纵arr来操作这个数组对象,此时arr的值就是这个数组对象在堆上的地址。*

三、如何求一个数组的长度

public class TestDemo34 {
    public static void main(String[] args) {
        int[] arr = new int[]{1, 2, 3, 4};
        int len = arr.length;
        System.out.println(len);
    }
}

这里我们可以调用数组属性,来计算数组长度。

四、如何打印数组
数组的打印方式一共有三种:

public class TestDemo34 {
    public static void main(String[] args) {
        int[] arr = new int[]{1, 2, 3, 4};
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

注:
①:数组的下标是从0开始的,利用for循环从0下标对应的元素1开始打印。直到遍历完。
②如果i大于了数组的长度,会抛出异常,称为数组越界。

public class TestDemo34 {
    public static void main(String[] args) {
        int[] arr = new int[]{1, 2, 3, 4};
        for (int val : arr) {
            System.out.println(val + " ");
        }
    }
}

注:冒号左边是数组当中元素的类型+val,右边是数组的名字

import java.util.*;
public class TestDemo34 {
    public static void main(String[] args) {
        int[] arr = new int[]{1, 2, 3, 4};
        System.out.println(Arrays.toString(arr));
    }
}

注:这种方式是将数组以字符串的形式打印出来。Arrays叫作操作数组的工具类,可以提供很多方法供我们操纵数组。需要导入import java.util.Arrays这个包。

五、数组作为参数的传递

Java当中数组可以作为参数进行传递

public class TestDemo34 {
    public static void print(int array[]) {
        for (int val : array) {
            System.out.println(val);
        }
    }
    public static void main(String[] args) {
        int[] arr = new int[]{1, 2, 3, 4};
        print(arr);
    }
}

这里我们可以写一个方法来将数组作为参数传递到方法当中打印。

通过数组交换两个数字:

public class TestDemo34 {
    public static void swap(int[] array){
        int tmp = array[0];
        array[0]=array[1];
        array[1]=tmp;
    }
    public static void main(String[] args) {
          int[] arr = new int[]{10, 20};
          swap(arr);
          System.out.println(arr[0]);
          System.out.println(arr[1]);
    }
}

arr在栈上有一块空间,它是一个引用类型,指向的是后面这个数组,所以保存了10和20的地址,调用函数的时候arr的值拷贝给了array,所以array得到了10和20的地址,所以可以在方法中利用tmp进行交换

六:null

int[] arr = null;

代表空引用,此时arr不引用任何对象,也可以称为arr引用的空对象,跟地址没有任何的牵扯。

七、数组作为方法的返回值
示例:将数组中的元素扩大三倍:

import java.util.Arrays;
public class TestDemo34 {
    public static int[] swap(int[] array) {
        int[] tmp = new int [array.length];
        for (int i = 0; i < array.length; i++) {
            tmp[i] = array[i] * 3;
        }
        return tmp;
    }
    public static void main(String[] args) {
        int[] arr = new int[]{1, 2, 4, 20};
        //int[]array = swap(arr);
        System.out.println(Arrays.toString(swap(arr)));
    }
}

八、工具类Arrays的用法:

  1. 将一个数组排序:
import java.util.Arrays;
public class TestDemo34 {
    public static void swap(int[] array) {
        //int[] tmp = new int [array.length];
        Arrays.sort(array);
    }
    public static void main(String[] args) {
        int[] arr = new int[]{1, 2, 3,18,4,5, 20};
        swap(arr);
        System.out.println(Arrays.toString(arr));
    }
}

  1. 查找数组当中的指定元素
 public static void main(String[] args) {
        int[] arr = new int[]{1, 2, 3,18,4,5, 20};
        int a = Arrays.binarySearch(arr,2,5,18);//在2号位置和5号位置之间找18对应的下标

        System.out.println( a);
    }
}

注:Java当中遇到的fromlndex,tolndex,一般都是左闭右开的。

将数组中的元素拷贝到新的数组中

  public static void main(String[] args) {
        int[] arr = new int[]{1, 2, 3, 18, 4, 5, 20};
        int[] ret = Arrays.copyOfRange(arr, 2, 6);//将2号位置和6号位置之间的数组拷贝到新数组当中。
        System.out.println(Arrays.toString(ret));
    }
}

注:同样也是左闭右开。

数组填充

 public static void main(String[] args) {
        int[] arr = {1, 2, 5, 8, 13, 27, 58};
        Arrays.fill(arr, 2,5,3);//将2号位置和5号位置之间填充为3
        System.out.println(Arrays.toString(arr));
    }
}
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值