一、数组概念
数组:数组是具有相同数据类型的一组数据的集合。
二、数组的分类
1、根据数组的维数将数组分为一维数组、二维数组、三维数组,多维数组等。
2、一维数组【实质上是一组相同类型数据的线性集合】
2.1、一维数组的语法格式:
数组元素的类型 数组名字=new 数组元素的类型[数组元素的个数];
2.2、初始化一维数组的两种方式:
包括两种方式:静态初始化一维数组,动态初始化一维数组。
静态初始化语法格式: int[] array={100,200,300};
动态初始化语法格式: int[] array=new int[5];
3、数组的基本特点
3.1、java语言中的数组是一种引用数据类型,不属于基本数据类型。数组的父类是 Object。
3.2、数组实际上是一个容器,可以同时容纳多个元素。(数组是一个数据的集合)
3.3、数组当中可以存储基本数据类型的数据,也可以存储引用数据类型的数据。
3.4、数组因为是引用类型,所以数组是存储在堆当中的。
3.5、数组当中如果存储的是"java对象"的话,实际上存储的是对象的“引用(内存地址)”
3.6、数组一旦创建,在java中规定,长度不可变。
3.7、数组的分类:一维数组、二维数组、三维数组、多维数组......(一维数组较多)
3.8、所有的数组对象都有length属性,用来获取数组中的元素的个数。
3.9、java中的数组要求数组中元素的类型统一。
3.10、数组在内存方面存储的时候,数组中的元素内存地址是连续的。(数组是一种简 单的数据结构)
3.11、所有的数组都是拿第一个小方框的内存地址作为整个数组对象的内存地址。
3.12、数组这种数据结构的优点和缺点是什么?
优点:查询、查找、检索某个下表上的元素时效率极高。可以说是查询效率最高 的一个数据结构。
为什么检索效率高?
第一:每一个元素的内存地址在空间存储上是连续的。
第二:每一个元素类型相同,所以占用空间大小一样。
第三:知道第一个元素内存地址,知道每一个元素占用空间的大小,又知道下 标,所以 通过一个数学表达式就可以计算出某个下标上元素的内存地址。 直接通过内存地 址定位元素,所以数组的检索效率是最高的。
缺点:
第一:由于为了保证数组中每个元素的内存地址连续,所以在数组上随机删除或 者增加元素的时候, 效率极低,因为随机增删元素会涉及到后面元素统一向前或 者向后位移的操作。
第二:数组不能存储大数据量,为什么? 因为很难在内存空间上找到一块特别 大的连续的空间。 注意:对于数组中最后一个元素的增删是没有效率影响的。
代码示例如下:
4、二维数组
4.1、二维数组定义:二维数组其实是一个特殊的一维数组,特殊在这个一维数组当中的 每一个元素是一个一维数组。第一个下标代表元素所在的行,第二 个下标代表元素所在的列。
4.2、二维数组的语法格式:
数组元素的类型 数组名字[][]=new 数组元素的类型[][];
数组元素的类型[][] 数组名字=new 数组元素的类型[][];
4.3、二维数组的初始化:
int arr[][]={{1,2},{3,4}};
三、数组的基本操作
1、遍历数组
遍历数组:获取数组中的每个元素,通常遍历数组是使用for循环来实现。遍历二维数组使用双 层for循环,通过数组的length属性可以获得数组的长度。
2、数组查询
2.1、Arrays类的binarySearch()方法,可以使用二分搜索法来搜索指定数组。binarySearch()方法 提供了多种重载形式,可以用于各种类型数组的查找需要。binarySearch()方法有两种参数 类型(如下)。
2.1.1、语法:binarySearch(Object[],Object key),a代表要搜索的数组,key要搜索的值。
如果key包含在数组中,则返回搜索值的索引;否则返回-1。
2.1.2、语法:binarySearch(Object[] a,int fromIndex,int toIndex,Object key)
a代表要进行检索的数组,fromIndex代表指定范围的开始处索引(包含);
toIndex代表指定范围的结束处索引(不包含),Key:要搜索的元素。
3、数组排序算法
数组常用的排序算法:冒泡排序、选择排序等。
3.1、冒泡排序
3.1.1、冒泡排序:基本思想就是对比相邻的元素值,满足条件就交换元素值,较小的元素移 动到数组前面,把大的元素移动到数组后面,这样较小的元素就像气泡一样从底部上 升到顶部。
3.1.2、具体算法实现过程:冒泡算法由双层循环实现,其中外层循环用于控制排序轮数,内 层循环用于对比数组中每个邻近元素的大小,来判定是否要交换位置,对比和交换次 数随排序论述而减少 。
3.1.3、具体算法实现代码:
3.2、选择排序
3.2.1、选择排序:基本思想将指定排序位置与其他数组元素分别对比,满足条件就交换元 素值。
3.2.2、具体算法实现过程:每一趟从待排序的数据元素中选出最小的(或最大的)一个元 素,顺序地放在已经排好序的数列的最后,直到全部待排序的数据元素排完。
3.2.3、具体算法实现代码: