- 数组的定义
- 数组的内存结构
- 数组定义常见问题
- 数组常见操作
- Java参数传递问题--值传递
- 二维数组
同一种类型数据的集合,可以是基本数据类型,也可以是引用数据类型。
数组的特点:
- 数组存储的都是相同数据类型的元素(相同数据类型)
- 数组的长度也就是数组中元素的个数(固定长度)
- 元素从0开始编号,编号也称“索引”:index(下标,角标)(从零开始)
- 数组中元素的访问方式是通过数组名+索引的方式:arr[1](索引访问)
数组的定义格式
初始化方式1:
动态初始化:数组的创建和元素的赋值分开进行
格式:
元素类型[] 数组名 = new 元素类型[数组长度];
int[] arr = new int[3];
初始化方式2:
静态初始化:数组创建时就给数组元素赋值
格式:
元素类型[] 数组名 = new 元素类型[]{元素1,元素2,…};
int[] arr = new int[]{2,0,3,1};
静态初始化的简化写法
int[] arr = {2,0,3,1};
直接打印数组类型的变量,会发现结果是一段看不懂的字符串,这就是引用数据类型变量的特点,它实际上代表的是一段内存空间的十六进制表示形式.真正的数据在JVM的堆内存空间中。
note:动态初始的构成元素都是默认是初始化成默认值的。
Java程序在运行时,为了提高运行效率,对内存进行了不同区域的划分,每一种区域都有特定的处理数据的方式和内存管理方式
主要有以下几种:
- 栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放
- 堆内存:存放数组和对象,通过new建立的实例都存放在堆内存中
每一个实例都有内存地址值
实例中的变量都有默认初始化值
当实例不再被使用,会在不确定的时间被垃圾回收器回收
- 方法区:存放类文件和方法(面向对象部分再讲解)
- 本地方法栈:供本地方法使用,与操作系统相关
- 程序计数器--Program Counter:对字节码文件计数
数组的内存结构:不属于四类八种,所以占用两种内存
数组遍历:依次访问每个元素,访问的次数就是元素的个数,访问次数的确定:length属性(数组名.length)。
7.1二维数组的概念
7.2 二维数组的定义
注意事项:
1.使用格式1,2时必须指定第一维长度
2.动态,静态初始化不能同时使用
7.3二维数组的遍历
8.1冒泡排序:bubble
冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最大数。如此下去,直至最终完成排序。
8.2 比较排序:compare(选择排序:select)
一下皆为静态方法。
- binarySearch:复制指定的数组
- copyOf:复制指定的数组
- copyOfRange:将指定数组的指定范围复制到一个新数组
- deepEquals:如果两个指定数组彼此是深层相等
- deepToString:返回指定数组“深层内容”的字符串表示形式。
- deepHashCode:基于指定数组的“深层内容”返回哈希码。
- equals:如果两个指定的 某 型数组彼此相等,则返回 true。
- fill: 将指定的 某型 值分配给指定 某 型数组的每个元素。
- sort:根据元素的自然顺序对指定某类型数组按升序进行排序。
- toString:返回指定数组内容的字符串表示形式。
单独介绍一下二分查找: