第三章 数组
一. 数组的概述
- 定义:数组(Array),是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,并通过编号的方式对这些数据进行统一管理。
- 常见概念:数组名、下标(索引)、元素、数组的长度
- 数组的特点:
- 数组本身属于引用数据类型的变量。数组内的元素可以任何数据类型,包括基本数据类型和引用数据类型
- 创建数组对象会在内存中开辟一整块连续的空间
- 数组的长度一旦确定,就不能修改
4. 数组的分类:
- 按照维度:一位数组、二维数组...
- 按照数组元素的类型:基本数据类型元素的数组、引用数据类型的数组(对象数组)
二. 一维数组的使用
- 声明方式: type var[ ] 或 type[ ] var 注:声明数组时不能指定其长度
- 初始化:
- 静态初始化:数组的初始化和数组元素的赋值操作同时进行 e.g. int[ ] ids = new int[ ]{1, 2, 3} 简写 int[ ] ids = {1, 2, 3}
- 动态初始化:数组的初始化和组数元素的赋值操作分开进行 e.g. String[ ] names = new String[5]
- 数组一旦初始化完成,其长度就确定了
3. 数组元素的引用:数组名[数组元素下标]
注:数组的角标从0开始,到数组的长度-1结束
4. 数组的长度:通过其属性length来获取 e.g. ids.length names.length
5. 数组元素的默认初始化值:
- 元素是整型( int、short、byte、long ):0
- 元素是浮点型( float、double ):0.0
- 元素是char型:0 或 ‘\u0000'
- 元素是boolean型:false
- 元素是引用数据类型:null
6. 一位数组的内存解析
三. 二维数组的使用
- 声明方式: type var[][] 或 type[][] var 或 type[] var[]
- 初始化:
- 静态初始化:int[][] arr = new int[][]{ {1,2,3},{4,5},{6,7,8} }
int[] arr[] = new int[][]{ {1,2,3},{4,5},{6,7,8} }
int[] arr[] = { {1,2,3},{4,5},{6,7,8} } 注:只有静态初始化可以省略new
- 动态初始化:int[][] arr = new int[3][2] 或
- int[][] arr = new int[3][];arr[0] = new int[2]
3. 数组元素的引用:arr[][]
4. 数组的长度:arr.length arr[0].length
5. 遍历二维数组:
for( int i = 0 ; i < arr.length ; i++ ) {
for ( int j = 0 ; j < arr[ i ].length ; j++ ) {
}
}
6. 数组元素的默认初始化值:
说明:二维数组分为外层数组的元素和内层数组的元素
外层元素:arr[0], arr[1]
内层元素:arr[0][0], arr[1][2]
- 针对于动态初始化方法一:int[][] arr = new int[3][2]
外层元素的初始值为:地址值
内层元素的初始值为:与一位数组初始化情况相同
- 针对于动态初始化方法二:int[][] arr = new int[3][]
外层元素的初始值为:null
内层元素的初始值为:不能调用,否则报错
四. 排序算法
- 各种内部排序方法性能比较:
- 从平均时间而言:快速排序最佳。但在最坏情况下时间性能不如堆排序和归并排序。
- 从算法简单性看:由于直接选择排序、直接插入排序和冒泡排序的算法比较简单,将其认为是简单算法。对于Shell排序、堆排序、快速排序和归并排序算法,其算法比较复杂,认为是复杂排序。
- 从稳定性看:直接插入排序、冒泡排序和归并排序时稳定的;而直接选择排序、快速排序、 Shell排序和堆排序是不稳定排序
- 从待排序的记录数n的大小看,n较小时,宜采用简单排序;而n较大时宜采用改进排序
- 排序算法的选择:
- 若n较小(如n≤50),可采用直接插入或直接选择排序。当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插入,应选直接选择排序为宜。
- 若文件初始状态基本有序(指正序),则应选用直接插入、冒泡或随机的快速排序为宜;
- 若n较大,则应采用时间复杂度为O(nlgn)的排序方法:快速排序、堆排序或归并排序。
五. Arrays工具类的使用