数组可以存放多个同一类型的数据。数组也是一种数据类型,是引用类型。 即: 数(数据)组(一组)就是一组数据
基本概念
1.数组是引用数据类型,数组的父类是Object类
2.数组是一个容器,可以容纳多个元素(数组是一个数据的集合)
3.数组可以存储基本数据类型的数据,也可以是引用数据类型的数据
4.数组是引用数据类型,所有数组对象是在堆内存中的(数组存储在堆中)
5.数组中如果存的是Java对象的话,实际上存的是对象的引用,也就是内存地址
6.数组一旦创建,长度不可变
7.分类:一维数组,二维数组,多维数组
8.数组的length属性用来获取数组的元素个数
9.Java中的数组要求数组中元素的类型统一,不能存不同类型的元素
10.数组在内存方面存储的时候,数组中的元素内存地址(存储的每一个元素都是有规则的接着排列)是连续的,内存地址连续。数组实际上是一种简单的数据结构
11.数组的内存地址就是第一个元素的内存地址
12.下标从0开始,arr.length-1是最后一个元素的下标
数组存储结构的优点和缺点
优点:查找某个位置的元素效率高,可以说是查询效率最高的一个数据结构
为什么效率高:
①每一个元素的内存地址在空间存储上是连续的
②每一个元素类型相同,占用空间大小一样
③如果知道第一个元素的内存地址,知道每一个元素占用空间大 小 ,然后又知道下标, 我们可以通过数学表达式去计算某给下标上面的元素 的内存地址,直接通过内存地址来定位元素,所以数组的检索效率最高
数组不是逐个找元素,而是算出一个内存地址,直接定位
缺点:
①为了保证数组中每一个元素的内存地址连续,所以在数组中随机插入或删除元素 的效率低,需要移动大量的元素
②数组不能存储大数据量
很难在内存空间中找到一块很大的连续内存空间
注意:对数组中的最后一个元素的增删,是没有效率影响的
怎么初始化数组
方式:静态初始化,动态初始化
静态初始化:
数据类型 数组名[]={元素值1,元素值2,……}; int[] arr={1,2,3,4}; arr.length 可以获得数组的长度
动态初始化:
先声明数组
语法:数据类型 数组名[]; 也可以 数据类型[] 数组名;
int a[]; 或者 int[] a;
创建数组
语法: 数组名=new 数据类型[大小];
a=new int[10];
int[] arr=new int[5]; //这里的5表示数组的元素个数
数组初始化的时候,元素有默认值,它的默认值和元素类型有关
数组使用注意事项和细节
- 数组是多个相同类型数据的组合,实现对这些数据的统一管理
- 数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。
- 数组创建后,如果没有赋值,有默认值 int 0 ,short 0, byte 0, long 0, float 0.0,double 0.0 ,char u0000 ,boolean false ,String null
- 使用数组的步骤 :1. 声明数组并开辟空间 2 给数组各个元素赋值 3 使用数组
- 数组的下标是从 0 开始的。
<li>数组下标必须在指定范围内使用,否则报: 下标越界异常,比如 int [] arr=new int[5]; 则有效下标为 0-4</li> - 数组属引用类型,数组型数据是对象(object)
数组的赋值机制
- 基本数据类型赋值,这个值就是具体的数据,而且相互不影响。 int n1 = 2; int n2 = n1;
- 数组在默认情况下是引用传递,赋的值是地址。 看一个案例,并分析数组赋值的内存图(重点, 难点. )。 //代码 ArrayAssign.java int[] arr1 = {1,2,3}; int[] arr2 = arr1;