【java基础】数组是啥?有啥用?

数组的概念

数组是一种常见的数据结构,可用于存储多个数据,每个数组元素存放一个数据。可使用数组元素的索引来对其进行访问。
在这里插入图片描述

(1)特点

  • 特点一:
    一个数组只能存储一种数据类型的数据,可以是基本类型,也可以是引用类型的数据。比如定义了int类型的数组,里面就不能存放char类型的数据。
  • 特点二:
    数组本身是一种引用类型。这个在数据类型的总结中提到过,引用类型包括类,接口,数组等。例如int是一个基本类型,但是int[]是一种引用类型。

(2)和集合的异同

  • 同:
    都是用来存储多个数据的。
  • 异:
    a、数组是强类型,存入时会对其进行检查。集合是弱类型,存入时不会检查,所以如果存入一个不同类型的数据,就会在运行时会报错。java5之后,引用了泛型来解决这个问题。
    b、数组里可以存放基本类型和引用类型。集合里只能存放引用类型。
    c、数组一旦定义了,长度不可变化。集合中存放的元素的数量可以变化。
    d、数组无法保存有映射关系的数据,比如语文-80,数学-90。但是集合中可以。
数组的定义和初始化

数组的初始化有两种:静态初始化和动态初始化。静态初始化由程序员显示指定每个数组元素的初始值,有系统决定数组长度。动态初始化程序员只指定数组长度,由系统为数组元素分配初始值。定义和初始化的方式有多种,小编只列举常用的。

//定义+静态初始化
int [] a={5,6,7};
//定义+动态初始化
int[] b=new int[3];
数组的使用

(1)为元素赋值和访问数组元素值

//为元素赋值
a[1]="Mei";
//访问数组元素值
a[1];

(2)获得数组的长度

使用for循环输出每个数组元素的值:

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

使用foreach循环输出每个数组元素的值:(推荐)

for(int x:a){
  System.out.println(x);
}

(3)采用循环方式为每个数组元素赋值
使用foreach循环迭代数组元素时,循环变量相当于一个临时变量,所以对其进行赋值,并不能改变真正的数组元素的值。如果想改变数组元素的值,可使用for循环。具体使用过程如下。

for (int i=0;i<a.length;i++){
          a[i]=i+10;
}
Arrays类

Arrays类里定义了几个可用于操作数组的方法,比如:

//定义了两个数组
int [] c={5,6,7};
int[] d={3,4,5,9};
//判断数组c、d是否完全相等(数组元素能够一一对应相同)
Arrays.equals(c,d);

//将一个数组转换成一个字符串。将输出[5,6,7]
Arrays.toString(c);

//将数组的第3个、第4个元素赋值为1
Arrays.fill(c,2,4,1);

//对c进行排序
Arrays.sort(c);

//对c进行并发排序,这个性能比sort()更高
Arrays.parallelSort(c);
内存分析

(1)数组的内存分析
数组属于引用类型,我们讨论数组在内存中的存储,也就是在讨论引用类型在内存中是怎么存储的。数组的引用变量存储在栈中,数组本身存储在堆中,引用变量指向数组本身。

在上图中,c,d指向各自的数组本身,如果执行了d=c;代码后,c就将自己的引用地址赋给了d。d原本指向的地址就会因为失去引用而被垃圾回收器回收。就像下图。

(2)基本类型数组的初始化
基本类型数组的初始化的内存分布,和上上个图是一样的。

(3)引用类型数组的初始化
以下代码是要定义一个Person类这个引用类型的数组students,其内有两个数组元素xiaoming、xiaohong。

//定义并初始化一个Person类型的数组students
Person[] students=new Person[2];

//创建一个Person类的对象xiaoming,并对其的age,height属性进行赋值。
Person xiaoming=new Person();
xiaoming.age=15;
xiaoming.height=1.83;
//同理,再创建另一个对象xiaohong。
Person xiaohong=new Person();
xiaohong.age=20;
xiaohong.height=1.65;

//将xiaoming、xiaohong两个变量的值分别赋值给数组元素的第一个值、第二个值
students[0]=xiaoming;
students[1]=xiaohong;

内存分析图如下:
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卡夫卡的熊kfk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值