Java基础-数组(详细版)

前言

 数组是一种线性数据结构,是一个使用连续的内存空间存放相同的数据类型的集合容器,与其他容器相比,数组的区别主要在于性能与保存基本类型的能力。

        在Java中,数组是一种效率最高的存储和随机访问对象的方式,通过寻址公式,随机访问的时间复杂可以达到O(1),但是为了保持空间的连续性,在数组中插入、删除数据时,都需要移动后面数据,该操作的时间复杂度为O(n)。另外,由于空间上连续,所以数组对CPU缓存比较友好,借助CPU的缓存机制,预读数组中的数据,提高访问效率。但是,由于数组是定长的,一旦声明之后就不可以改变长度,所以如果长度声明过大或者过小都会造成问题。

一,数组

数组指的是一种容器,可以用来存储同种数据类型的多个值。

数组容器在存储数据的时候,需要结合隐式转换来考虑。

例如:int类型的数组容器(boolean byte short int double)

建议:容器的类型和存储的数据一致。

二,数组的定义

数组有两种定义格式:

  • 数据类型 [] 数组名   int []  array
  • 数据类型 数组名[]    int  array[]

三,数组的初始化

初始化:就是在内存中,为数组容器开辟空间,并将数据存入容器的过程。 

1.静态初始化

完整格式:数据类型[] 数组名=new 数据类型[]{元素1,元素2,元素3....};

int[] array=new int[]{11,22,33};

简写格式:数据类型[] 数组名={元素1,元素2,元素3....};

int[] array={11,22,33};

注意:数组一旦创建完毕就不会发生变化

2.动态初始化

初始化时只指定数组长度,由系统为数组分配初始值

格式:数据类型【】数组名=new 数据类型【数组长度】

数组默认初始化的规律

整数类型:默认初始化值0

小数类型:默认初始化0.0

字符类型:默认初始化值‘/u0000’空格

布尔类型:默认初始化 false

引用数据类型:默认初始化值 null

特点:在创建时,由我们自己指定数组的长度,由虚拟机给出默认的初始化值

3.数组动态初始化和静态初始化的区别

动态初始化:手动指定数组长度,由系统给出默认初始化值,

只明确元素个数,不明确具体数值,推荐使用动态初始化

举例:使用数组容器来存储键盘录入的5个整数。

int[] arr={????? };

int[] arr=new int[5]

静态初始化:手动指定数组元素,系统会根据元素个数,计算出数组的长度

需求中已经明确了要操作的具体数据,直接静态初始化即可。

举例:将全班的学生成绩存入数组中11,22,33

int[l arr={11,22,33};

四,数组的地址值和元素的访问,遍历

1.数组的地址值

double[] arr2 ={1.1,2.2,3.3};
System.out.println(arr2);//[D@568db2f2

数组的地址值表示数组在内存中的位置

解释一下地址值的具体含义

[  :表示一个数组

D  :表示当前数组里面的元素都是double类型的

@  :表示一个间隔符

568db2f2 :才是数组真正的地址值

2. 数组元素的访问和存储

访问:

格式:数组名[索引]

索引特点:从0开始

存储;

格式:数组名[索引]=具体数据/变量

一旦覆盖之后,原来的数据就不存在了

3.数组的遍历

将数组中所有的内容取出来,取出来之后可以(打印,求和,判断...)

注意:遍历指的是取出数据的过程,不要局限理解为,遍历就是打印!

for(int i=0;i<arr.length; i++){
//i:0 1 2 3 4
System.out.println(arr[i]);
}

自动的快速生成数组的便利方式

数组名.fori (idea提供)   

五,数组的常见问题和Java的内存分配

1.数组常见的问题

索引越界问题

当数组访问了数组中不存在的索引,就会引发索引越界异常。

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10

at javaee.array.main(array.java:31)

 2.Java的内存分配

栈:方法运行时使用的内存,比如main方法运行,进入方法中栈执行。

堆:存储对象或者数组,new用来创建,都存储在堆内

方法区:存储可运行的class文件

本地方法栈:JVM在使用操作系统功能时使用,和我们开发无关

寄存器:给CPU使用,和我们开发无关。

注意:在堆内存中都会有地址值。

六,数组练习

练习一

 定义一个数组,存储1,2,3,4,5
        遍历数组得到每一种元素,求数组里面所有的数据和

        int arr[]={1,2,3,4,5};
        int sum=0;
        for (int i = 0; i < arr.length; i++) {
            sum=sum+arr[i];
        }
        System.out.println(sum);

练习二

定义一个数组,存储1,2,3,4,5,6,7,8,9,10遍历数组得到每一个元素,统计数组里面一共有多少个能被3整除的数字*/
        int arr[]={1,2,3,4,5,6,7,8,9,10};
        int count=0;
       for (int i = 0; i < arr.length; i++) {
            if(arr[i] %3== 0){
              // System.out.println(arr[i]);
               count++;
            }

        }
       System.out.println("数组中能被3整除的数字有"+count+"个");
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值