java基础(动力节点老杜视频学习笔记)三(10)

第三章

二十一.关于java中的一维数组

1.java语言中的数组是一种引用数据类型。不属于基本数据类型。数组的父类是Object

2.数组实际上是一个容器,(数组是一个数据的集合。)

数组:字面意思是"一组数据"

3.数据当中可以存储"基本数据类型"的数据,也可以存储"引用数据类型"的数据

4.数组因为是应用类型,所以数据对象是堆内存当中。(数组是存储在堆当中的)

5.数组在内存方面是怎么样的一个图形?

 

数组当中如果存储的是"Java对象"的话,实际上存储的是对象的"引用(内存地址)"数组中不能直接存储java对象

6.数组一旦创建,在java中规定,长度不可变

7.数组的分类:一维数组、二维数组、三维数组、多维数组...(一维数组较多,二维数组偶尔使用)

8.所有数组的对象都有length属性(java自带的),用来获取数组中元素的个数

9.java中的数组要求元素的类型统一。比如int类型只能存储int类型,Person类型数组只能存储Person类型

10.数组在内存方面存储的时候,数组中的元素地址(存储的每一个元素都是有规则的挨着排列的)是连续的,这是数组存储元素的特点。数组实际上是一种简单的数据结构

11.所有数组都是拿"第一个小方框的地址"作为整个数组对象的内存地址(数组中首元素的内存地址作为整个数组对象的内存地址)

12.数组中每一个元素都是有下标的,下标从0开始,以1递增。最后一个元素的下标是:length-1

下标非常重要,因为我们数组中元素进行"存取"的时候。都要用下标来进行

13.数组这种数据结构的优缺点是什么?

优点:

查询/查找/检索某个下标的元素时效率极高。可以说是查询效率最高的一个数据结构

为什么检索效率高?

第一:每个元素的内存地址在空间存储上是连续的

第二:每一个元素类型相同,所以占用空间大小一样

第三:知道第一个元素内存地址,知道每一个元素占用空间的大小,又知道下标,所以通过一个数学表达式就可以计算出每个下标上元素的内存地址。直接通过内存地址定位元素,所以数组的检索效率是最高的

数组中存储100个元素,或者存储100万个元素,在元素查询/检索方面,效率是相同的,因为数组中元素查找的时候不会一个一个找,是通过数学表达式计算出来的。(算出一个内存地址,直接定位的)

缺点:

第一:由于为了保证数组的数组中每个元素的内存地址连续,所以在数组上随机删除或者增加元素的时候,效率极低,因为随机增删元素会涉及到后面元素同意向前或者向后位移的操作

第二:数组不能存储大数据量,为什么?

因为很难在内存空间中找到一块很大的连续的内存空间

注意:对于数组中最后一个元素的增删,是没有效率影响的

14.怎么声明/定义一个一维数组?

语法格式:

int[]   array1;
​
double[]  array2;
​
boolean[]  array3;
​
String[]  array4;
​
Object[]  array5;

15.怎么初始化一个一维数组呢?

包括两种方式:静态初始化一堆数组,动态初始化一堆数组

一维数组静态初始化数组语法:

int[] array ={100, 2100, 300, 55};
​
Object[] objs = {new Object(),new Object(),new Object()};

一维数组动态初始化数组语法:

int[] array =new int[5]; //这里的5表示数组元素个数
                        //初始化一个5个长度int类型数组,每个元素默认值为0
​
Object[] objs = new Object[4];  //4个长度,每个元素默认值null

一维数组怎么遍历呢?

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

从最后一个元素遍历到第一个元素

for(int i = a.length-1; i >=0; i--){
​
System.out.println("颠倒顺序输出"+a[i]);  //i是下标
​
}

什么时候采用静态初始化方法,什么时候采用动态初始化方法?

当你创建数组的时候,确定数组中存储哪些具体的元素时,采用静态初始化方式

当你创建数组的时候,不确定将来数组中存储哪些元素,可以采用动态初始化方式,预先分配内存空间

对于数组来说,实际上只能存储java对象的"内存地址"。数组中存储的每个元素是"引用"。

二十二.关于一维数组的扩容与拷贝

在java开发中,数组长度一旦确定不可变,那么数组长度不够时,就需要扩容

java中对数组的扩容是:

先新建一个大容量的数组,然后将小容量数组中的数据一个一个拷贝到大数组当中,然后小数组对象被垃圾回收

结论:数组扩容效率较低。因为涉及到拷贝问题,所以在以后的开发中请注意:尽量减少进行数组的拷贝

可以在创建数组对象时预估下多长合适,最好预估准确,这样可以减少数组的扩容次数,提高效率

数组的拷贝:System.array copy()方法的使用


版权声明:本文为weixin_52361698原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。