3-1 数组的概述
- 数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
- 数组的常见概念
- 数组名
- 下标(或索引)
- 元素
- 数组的长度
- 数组本身是引用数据类型,而数组中的元素可以是任何数据类型,包括基本数据类型和引用数据类型。
- 创建数组对象会在内存中开辟一整块连续的空间,而数组名中引用的是这块连续空间的首地址。
- 数组的长度一旦确定,就不能修改。
- 我们可以直接通过下标(或索引)的方式调用指定位置的元素,速度很快。
- 数组的分类:
- 按照维度:一维数组、二维数组、三维数组、…
- 按照元素的数据类型分:基本数据类型元素的数组、引用数据类型元素的数组(即对象数组)
3-2 一维数组的使用
- 一维数组的声明方式:
type var[] 或 type[] var;
- 例如: int a[]; int[] a1; double b[]; String[] c; //引用类型变量数组
- Java语言中声明数组时不能指定其长度(数组中元素的数),例如:int a[5];//非法
- 动态初始化:数组声明且为数组元素分配空间与赋值的操作分开进行
- 静态初始化:在定义数组的同时就为数组元素分配空间并赋值。
- 定义并用运算符new为之分配空间后,才可以引用数组中的每个元素;
- 数组元素的引用方式:数组名[数组元素下标]
- 数组元素下标可以是整型常量或整型表达式。如a[3],b[i],c[6*i];
- 数组元素下标从0开始;长度为n的数组合法下标的取值范围:0--->n-1;如int a[] = new int[3];可引用的数组元素为a[0],a[1],a[2]
- 每个数组都有一个属性length指明他的长度,例如a.length指明数组a的长度(元素个数)
- 数组一旦初始化,其长度是不可变得
- 数组是引用类型,它的的元素相当于类的成员变量,因此数组一经分配空间,其中的每个元素也被按照成员变量同样的方式被隐式初始化。例如: public class Test { public static void main(String argv[]){ int a[]= new int[5]; System.out.println(a[3]); //a[3]的默认值为0 } }
- 对于基本数据类型而言,默认出示化值各有不同
- 对于引用数据类型而言,默认初始化值为null(注意与0不同)
- 创建基本数据类型数组 (1)
- Java中使用关键字new来创建数组
- 如下是创建基本数据类型元素的一维数组 public class Test{ public static void main(String args[]){ int[] s; s = new int[10]; for ( int i=0; i<10; i++ ) { s[i] =2*i+1; System.out.println(s[i]); } } }
- 创建基本数据类型数组 (2)
- 创建基本数据类型数组 (3)
3-3 多维数组的使用
- Java 语言里提供了支持多维数组的语法。
- 如果说可以把一维数组当成几何中的线性图形,那么二维数组就相当于是一个表格,像右图Excel中的表格一样。
- 对于二维数组的理解,我们可以看成是一维数组array1又作为另一个一维数组array2的元素而存在。其实,从数组底层的运行机制来看,其实没有多维数组。
3-4 数组中涉及到的常见算法
1.数组元素的赋值(杨辉三角、回形数等) 2. 求数值型数组中元素的最大值、最小值、平均数、总和等 3. 数组的复制、反转、查找(线性查找、二分法查找) 4. 数组元素的排序算法
二分法查找算法
排序算法
排序:假设含有n个记录的序列为{R1,R2,...,Rn},其相应的关键字序列为{K1,K2,...,Kn}。将这些记录重新排序为{Ri1,Ri2,...,Rin},使得相应的关键字值满足条Ki1<=Ki2<=...<=Kin,这样的一种操作称为排序。
通常来说,排序的目的是为了快速查找
衡量排序算法的优劣: 1.时间复杂度:分析关键字的比较次数和记录的移动次数 2.空间复杂度:分析排序算法中需要多少辅助内存 3.稳定性:若两个记录A和B的关键字值相等,但排序后A、B的先后次序保 持不变,则称这种排序算法是稳定的。
排序算法分类:内部排序和外部排序。
- 内部排序:整个排序过程不需要借助于外部存储器(如磁盘等),所有排序操作都在内存中完成。
- 外部排序:参与排序的数据非常多,数据量非常大,计算机无法把整个排序过程放在内存中完成,必须借助于外部存储器(如磁盘)。外部排序最常见的是多路归并排序。可以认为外部排序是由多次内部排序组成。
十大内部排序算法
算法的5大特征
冒泡排序
快速排序