【Java进阶篇】第二章 Java数组(上篇) 一维数组

发布于:2022-11-09 ⋅ 阅读:(479) ⋅ 点赞:(0)

1、Array通识

  • Java中,数组是一种引用数据类型,不属于基本数据类型,数组的父类是Object

  • 数组实际是个容器,可以同时容纳多个元素

  • 数组,即一组数据,是个数据集合

  • 数组当中可以存储基本数据类型,也可以存储引用数据类型的数据

  • 数组存储在堆当中
    在这里插入图片描述

  • 数组中如果存储的是Java对象的话,实际上存储的是引用(对象的内存地址)

  • 数组一旦创建,Java中规定长度不可变

2、数组的分类

Java中,数组分为一维数组、二维数组、三维数组、多维数组……

Java中的数组对象都有length属性,用于获取数组中元素的个数

Java中的数组,要求数组中元素类型要统一,如int数组则只能存int类型的数据

3、一维数组的内存结构

在这里插入图片描述

  • Java中,一维数组在内存中存储的时候,数组中元素的内存地址是连续的
  • 所有数组都是以首元素的内存地址做为整个数组对象的内存地址
  • 数组中每一个元素都是有下标的,从0开始,最后一个下标为length-1

数组这种数据结构的优缺点:

优点:

  • 查询检索某个下标上的元素效率极高(首先每个元素的内存地址连续,其次元素类型相同即占用的空间大小一样,直白说就是偏移量一样,这样一个数学表达式就能算出某个下标上元素的内存地址),是效率最高的一个数据结构

缺点:

  • 为了保证元素内存地址的连续,在数组上随机增删元素时效率较低,因为会导致后面的元素统一向前向后位移(最后一个元素无影响,然而时间复杂度按照最坏的情况算)
  • 不能存储大量数据(不容易找到一块很大的连续的内存空间)

4、一维数组的定义与初始化

定义:

//定义
int[] array1;
boolean[] array2;
Object[] array3;

初始化:

静态初始化一维数组:
int[] array = {100,200,300};

动态初始化一维数组:
int[] array = new int[5]; //5表示元素个数是5,元素值默认是0
String[] names = new String[6]; //6个元素,默认值null

5、一维数组中元素的访问

//测试数组
int[] a = {1,2,3,4,5};

(1)查

通过数组名[下标]

System.out.println("元素个数:"+ a.length); //数组对象的length属性
System.out.println(a[0]); //首位元素
System.out.println(a[a.length-1]); //末尾元素

(2)改

数组名[下标] = values;

a[0] = 111;
a[a.length-1] = 9527;

(3)遍历

//正序遍历
for(int i=0;i<a.length;i++){
	System.out.println(a[i]);
}

//倒叙遍历
for(int i=a.length-1;i>=0;i--){
	System.out.println(a[i]);
}

//下标越界
System.out.println(a[100]);

下标越界异常:ArrayIndexOutBoundException

在这里插入图片描述

6、动态初始化一维数组

关于静态和动态初始化数组,静态即创建数组时,已确定个元素的值,如

Object[] objects = {new Object(),new Object(),new Object(),new Object()};

动态初始化即后期再a[0]=xx;a[1]=xx;如:

int[] a = new int[4];

举例:

public static void printArray(String[] args){
        for(int i=0;i<args.length;i++){
            System.out.println(args[i]);
        }
    }

    public static void main(String[] args) {
    	//等价于String[] a = new String[3];
    	//再printArray(a);
        printArray(new String[3]);

        //直接传递静态数组是错误写法
        printArray({"1", "2", "3"});

        //这样是允许的
        printArray(new String[]{"1", "2", "3"});

        //或者改成这样也行
        String[] a = {"1", "2", "3"};
        printArray(a);
    }

部分截图:

在这里插入图片描述

7、main方法的传参是String数组

到此,main方法中的传参也就明晰了,即一个String数组String[] args,数组名args


public static void mian (String[] args){
	System.out.println("JVM传的String数组的长度是:" + args.length);
}

结果:
在这里插入图片描述
分析:

args做为一个引用,我们引用.length属性没有空指针异常,说明args不是null。即String[] args = {};
或者说String[] args = new String[0]; ,就是说数组对象创建了,但里面没有数据。


🍁那么String[] args数组何时会有值?

String[] args数组是留给用户的,用户可以再控制台上输入参数,这些参数会被转化为String[] args

关于这一点,举例如下: 细品!!
在这里插入图片描述
在这里插入图片描述

8、数组中存储引用数据类型

在这里插入图片描述
在这里插入图片描述

9、数组的扩容

在这里插入图片描述
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到