保姆级讲解数组

一、数组是什么?

数组是相同类型元素的一个集合。它在内存上是一段连续的空间,每个空间都有自己的编号(数组的下标),起始位置为0,依次递增。

二、数组的创建及其初始化

1、数组的创建

T[] 数组名 = new T[N];

其中,T为数据类型;T[ ]为数组类型;N为数组的长度。比如:

int[] arr1 = new int[10];//创建一个可以容纳10个int类型元素的数组
double[] arr2 = new double[5];//创建一个可以容纳5个double类型元素的数组
String[] arr3 = new String[3];//创建一个可以容纳3个字符串元素的数组

以第一条为例:int 是一个整型的数据类型;int[ ]是arr1这个数组的数组类型;arr1为数组名;10为数组的长度。

2、数组的初始化

int[] arr1 = new int[5];
int[] arr2 = new int[] {1, 2, 3, 4, 5};
String[] arr3 = {"苹果","香蕉","雪梨","荔枝"};
double[] arr4 = {1.0, 2.5, 6.8, 3.6};

第一条为动态初始化,在创建数组的时候,直接指定数组的元素个数,但是没有给它规定数据内容。
第二、第三、第四条都为静态初始化,创建数组的时候并没有直接指定数组的元素个数,而是直接指定数组里面的数据内容。
注意点:
1、静态初始化的数组它的元素类型一定要跟数据类型的类型一致。 如:在arr3数组中,“苹果”,“香蕉”…都是被双引号括着的,表示是字符串类型,因此,比如"苹果"这个元素就是字符串类型的元素,是跟数据类型是相一致的。
2、静态初始化的数组虽然没有指定元素个数,但会根据规定的数据内容中的元素个数来确定数组的长度
如:第arr2数组中,里面有的数据内容有5个元素,所以arr2的数组长度为5。
3、静态初始化的可以简写,可以不要等号右边的 new 数组类型, 如:

int[] arr = new int[] {1, 2, 3, 4, 5};//可以简写成
int[] arr = {1, 2, 3, 4, 5};

值得注意的是:虽然我们打代码的时候简写了,但是编译器编译代码时会帮我们还原成未简写的形式。简写只是为了让打代码的人更省事。

3、如果数组未被初始化,数组的元素有其默认值
在这里插入图片描述
在这里插入图片描述

三、数组的元素访问

1、数组是一段连续的内存空间,支持随机访问,即可通过数组下标来访问任一位置的元素
2、数组下标从0开始,到N结束。即:介于[0,N)的范围内。N为元素个数,不能越界,否则会出现下标越界异常。
在这里插入图片描述
以上的思维导图有助于你们对整体的一个理解,下面我拿几段代码来举例:

public class SZBL1 {
//逐一访问
    public static void main(String[] args) {
        int[] array = {1, 12, 33, 4, 5};
        System.out.println(array[0]);//输出 1
        System.out.println(array[1]);//输出 12
        System.out.println(array[2]);//输出 33
        System.out.println(array[3]);//输出 4
        System.out.println(array[4]);//输出 5
    }
}
public class SZBL1 {
    public static void main(String[] args) {
        int[] array = {1, 12, 33, 4, 5};
        for (int i = 0; i < array.length ; i++) {
            
        }
    }
}

输出的结果为1 12 33 4 5

public class SZBL1 {
    public static void main(String[] args) {
        int[] array = {1, 12, 33, 4, 5};
        for ( int i: array) {
            System.out.print(i+" ");
        }
    }
}

输出的结果也为1 12 33 4 5
其中,值得注意的是for(int i : array)语句中的 int 指的是变量的数据类型,i为变量,array为数组名

四、数组的应用

在这里插入图片描述
以上的思维导图有助于你们对整体的一个理解,下面我拿几段代码来举例(剩下的你们可以自行去检验):

import java.lang.reflect.Array;
import java.util.Arrays;

public class CreatSZ {
    //数组部分拷贝
    public static void main(String[] args) {
    int[] array = {1, 2, 3, 4, 5};
    int[] copy = Arrays.copyOfRange(array, 1, 3);
        System.out.println(Arrays.toString(copy));
}
    

值得注意的是: int[] copy = Arrays.copyOfRange(array, 1, 3);这句话中的(array,1,3)分别值得是数组名,从1下标到3下标,我们数组的下标检索是从0开始的,采用左闭右开的形式来访问,因此 ,这里输出的值只有2,3

import java.lang.reflect.Array;
import java.util.Arrays;

public class CreatSZ {
//数组的全部拷贝
 	public static void main(String[] args) {
  	int[] array = {1,2,3,4};
    int[] copy = Arrays.copyOf(array,array.length);
        for (int i = 0; i < array.length; i++) {
            copy[i] = array[i];
        }
        System.out.println(Arrays.toString(array));
    }
}

这里是把整个数组的数据都拷贝下来了,[0,N),输出1 2 3 4

import java.lang.reflect.Array;
import java.util.Arrays;

public class CreatSZ {
//数组的扩容
	 public static void main(String[] args) {
  	 int[] array = {1,2,3,4};
  	 array = Arrays.copyOf(array,array.length*2);
  	 System.out.println(Arrays.toString(array));
    }
}

这里是把整个数组的数据都拷贝下来了,然后还增多了一倍的空间,这时那些多的空间还没有被初始化,所以用相应的数据类型的默认值填充。(默认值上文有提及)
因此,这里输出的结果是1 2 3 4 0 0 0 0

以上便是我对一维数组的讲解,希望对大家有所帮助!!!

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值