数组:
1、Java语言中的数组是一种引用数据类型。不属于基本数据类型。数组的父类是object。
2、数组实际上是一个容器,可以同时容纳多个元素。(数组是一个数据的集合。)
3、数组当中可以储存“基本数据类型”的数据,也可以储存“引用数据类型的数据”。
4、数组因为是引用数据类型,所以数组对象是堆内存当中。(数组是储存在堆当中的)
5、数组当中如果储存的是Java对象的话,实际上储存的是对象的“引用(内存地址)”,数组中不能直接储存Java对象。
7、数组的分类:一维数组、二维数组、三维数组、多维数组。。。(一维数组较多、二维数组较少)
8、所有的数组对象都有length属性(Java自带的),用来获取数组中元素的个数。
9、Java中的数组要求数组中元素的类型统一。比如int类型数组只能储存int类型,person类型数组只能储存person类型
(例如:去超市购物装【装苹果的购物袋只能装苹果不能装其他的东西】)
10、数组在内存方面存储的时候,数组中的元素内存地址(存储的每一个元素都是有规则的挨着排列的)是连续的。内存地址连续,这是数组存储元素的特点。数组实际上是一种简单的数据结构。
11、数组中首个元素的内存地址是作为整个数组对象的内存地址。
12、数组中每一个元素都是有下标的,下标从0开始,以1递增。最后一个元素的下标是length-1.
下标非常重要,因为我们对数组中元素的存取,都需要通过下标的进行。
13、数组这种数据结构的优缺点:
优点:查询/查找/检索某个下标上的元素时效率极高。可以说说是效率最高的一种数据结构。
为什么检索效率高?
1、每个元素的内存地址在空间存储上是连续的。
2、每个元素类型相同,所以占用空间大小一样。
3、知道第一个元素内存地址,知道每一个元素占用空间的大小,又知道下标,
所以通过一个数学表达式就可以计算出某个下标上元素的内存地址。
直接通过内存地址定位元素,所以数组的检索效率是最高的。
数组中存储个元素,或者万个元素,在元素查询/检索方面,效率是相同的,
因为数组中元素查找的时候不会一个一个找,是通过数学表达式计算出来的。(直接算出一个内存地址,直接定位。)
缺点:
第一:由于为了保证数组中每个元素的内存地址是连续的,所以在数组上随机删除或者增加元素的时候,
效率较低,因为随机增删元素会涉及到后面的元素同一向前或者向后位移的操作。
第二:数组不能存储大数据量,为什么?
因为很难在内存空间上找到一块特被大的连续的内存空间。
注意:对于数组中的最后一个元素的增删,是没有效率影响的。
14、怎么声明/定义一个一维数组?
语法格式:
int[] array1;
double[] array2;
boolean[] array3;
String[] array4;
Object[] array5;
15、怎么初始化一个一位数组?
包括两种方式:静态初始化一位数组,动态初始化一维数组。
静态初始化语法格式:
int[] array = {100.200,300};
动态初始化语法格式:
int[] array = new int [5]; // 这里的5表示数组的元素个数。初始化一个5个长度的int类型数组,每个元素默认值0;
String[] names = new String[6] //初始化5个长度的String类型的数组,每个元素的默认值为null。
16、关于每个数据类型的默认值:
数据类型 默认值
----------------------------
byte 0
short 0
int 0
long 0
float 0.0f
double 0.0
boolean false
char \u0000
引用数据类型 null
17、什么时候采用静态初始化方式,什么时候使用动态初始化方式?
当你创建数组的啥时候,确定数组中存储哪些具体的元素时,采用静态初始化方式。
当你创建数组的时候,不确定将来的数组中存储哪些数据,你可以采用动态初始化的方式,预先分配内存空间。